simDev1234
심플하고 차분하게
simDev1234
전체 방문자
오늘
어제
  • 분류 전체보기
    • Computer Science
      • Basic Math
      • Data Structure
      • Algorithm
      • Database
      • OS
    • Language
      • Java
      • Kotlin
      • SQL
    • Framework
      • Spring
      • Orm&Mapper
      • 프로젝트로 스프링 이해하기
      • 스프링 라이브러리
    • Infra
      • Cloud
      • Docker
      • Redis
      • AWS, Azure
      • Device
    • Etc
      • CleanCoding
    • Git,Github

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 참조변수
  • 자바프로그래밍
  • 참조타입
  • 스프링
  • null
  • 컨트롤러
  • 자바
  • 404
  • 자바프로그램
  • 자바메모리구조
  • controllerTest
  • JVM메모리구조
  • scanner #next() #nextLine()

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
simDev1234

심플하고 차분하게

Framework/프로젝트로 스프링 이해하기

[LMS만들기] 회원 상태 변경 및 비밀번호 초기화

2022. 10. 5. 20:03

|  회원 상세페이지에서 회원 상태변경하기 

- 회원 목록 --> 회원 상세정보 뷰

- 오늘 수업에서 만든 상세정보 뷰는 매우 간소화된 폼이었다.

- 큰 서비스를 제공하는 회사의 경우, 이보다는 더 복잡할 것 같다.

  ex. 만약 에듀테크 회사의 LMS라면, 여기에 결제내역, 수강이력, 이벤트 참여 이력 등등등이 포함될 것 같다.

- 오늘 배운 내용에서 가져가야할 점은, 서비스 관리자(ex. 영업/관리팀)가 직접 회원 상태를 변경할 수 있도록 해주는게 필요하다는 점. 그리고 그것은 MVC를 통해서 할 수 있다는 점.

 

* LMS Users Administration 예시

https://www.vedamo.com/knowledge/platform-tutorials/lms-users-administration/

 

LMS Users Administration | VEDAMO

The LMS Users Administration menu allows you to create and manage accounts on your learning management system. See how to do that here.

www.vedamo.com

 

|  오늘 새로 배운 기술

1. Thymeleaf 를 통해 Element의 href, value 속성에 parameter값 주입

<a th:href="${'detail.do?id=' + x.userId}" th:text="${x.userId}" ></a>
<input th:value="${member.userId}" type = "hidden" name = "userId">

ㄴ form을 아래처럼 사용할 수 있었다.

<tr>
    <th>회원 상태</th>
    <td>
        <p>
            현재 상태 <span th:text="${member.userStatus}"></span>
        </p>
        <div>
            <form method = "post" action = "/admin/member/status.do">
                <input th:value="${member.userId}" type = "hidden" name = "userId">
                <select name = "userStatus">
                    <option value = "REQ">가입승인중</option>
                    <option value = "ING">정상이용중</option>
                    <option value = "STOP">정지중</option>
                </select>
                <button type = "submit">상태 변경</button>
            </form>
        </div>
    </td>
</tr>
<tr>
    <th>비밀번호 초기화</th>
    <td>
        <div>
            <form method = "post" action = "/admin/member/password.do">
                <input th:value="${member.userId}" type = "hidden" name = "userId">
                <input type = "password" name = "password">
                <button type="submit">비밀번호 초기화</button>
            </form>
        </div>
    </td>
</tr>

 

2. 인터페이스로 사용자정의 예외코드 작성해보기 

- 일전에 배운 수업의 강사A분께서는, Enum타입으로 ErrorCode를 작성하고, 이걸 사용자정의 Exception으로 만들어서 처리를 해주었는데

- 이번에 배운 수업의 강사B분께서는. interface로 ErrorCode를 작성하고, 이걸 사용자정의 Exception으로 만들어서 처리해주었다.

- 방식의 차이이긴 한데, 재미있었던 점은 interface에서 맴버변수를 각성한 경우, 이걸 가져올 때 마치 Math.PI처럼 static하게 가져올 수 있었다는 점이다.

package com.example.fastlms.member.entity;

public interface MemberCode {

    // 가입 요청 중
    String MEMBER_STATUS_REQ = "REQ";
    
    // 현재 이용중인 상태
    String MEMBER_STATUS_NORMAL_ING = "ING";
    
    // 정지 상태
    String MEMBER_STATUS_STOP = "STOP";
    
}
/**
 * LDAP 사용자 인증
 * - 회원 정보가 잘못된 경우, 메일이 미인증된 경우 실패 응답
 * - 시큐러티의 GrantedAuthority를 통해 사용자 권한/역할 추가
 */
@Override
public UserDetails loadUserByUsername(String username)
        throws UsernameNotFoundException {

    Optional<Member> optionalMember = memberRepository.findById(username);

    // validate
    if (!optionalMember.isPresent()) {
        throw new UsernameNotFoundException("회원 정보가 존재하지 않습니다.");
    }

    Member member = optionalMember.get();

    if (MemberCode.MEMBER_STATUS_REQ.equals(member.getUserStatus())) {
        throw new MemberNotEmailAuthException("이메일 활성화 이후 로그인 해주세요.");
    }

    if (MemberCode.MEMBER_STATUS_STOP.equals(member.getUserStatus())) {
        throw new MemberStopUserException("정지된 회원입니다.");
    }

    // 사용자 권한, Role 추가
    List<GrantedAuthority> grantedAuthorities = new ArrayList<>();

    grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_USER"));

    if (member.isAdminYn()) { // 관리자일 경우
        grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
    }

    return new User(member.getUserName(), member.getPassword(), grantedAuthorities);
}

 

[ 참고 및 출처 ]

부트캠프 수업 이후 정리한 내용입니다.

'Framework > 프로젝트로 스프링 이해하기' 카테고리의 다른 글

[LSM 만들기] 강좌 목록 구현하기 - 스마트에디터, 등록/수정 동시 처리  (0) 2022.10.07
[LMS 만들기] 카테고리 수정, 삭제, 정렬  (0) 2022.10.06
[LMS만들기] 페이징 처리하기 (with MyBatis)  (0) 2022.10.05
[LMS만들기] 회원 검색 기능 구현  (0) 2022.10.04
[LMS 만들기] JPA와 MyBatis로 회원 목록 구현  (1) 2022.10.04
    'Framework/프로젝트로 스프링 이해하기' 카테고리의 다른 글
    • [LSM 만들기] 강좌 목록 구현하기 - 스마트에디터, 등록/수정 동시 처리
    • [LMS 만들기] 카테고리 수정, 삭제, 정렬
    • [LMS만들기] 페이징 처리하기 (with MyBatis)
    • [LMS만들기] 회원 검색 기능 구현
    simDev1234
    simDev1234
    TIL용 블로그. * 저작권 이슈가 있는 부분이 있다면 댓글 부탁드립니다.

    티스토리툴바