본문 바로가기
Java/SpringBoot

JWT 로그인 테스트-3

by wooksss 2025. 1. 21.

테스트 구현은 완료하고 다시 복기하며 생겼던 문제에 대해서 정리해보려고 한다.

 

○ 회원가입 아키텍쳐

○ 유저 정보 저장을 위한 Entity

public class JwtUser {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;

    private String password;

    private String role;

}

 

○ 회원가입을 위한 JoinService 생성

public Boolean joinProcess(JoinDto joinDto){
    String username = joinDto.getUsername();
    String password = joinDto.getPassword();

    Boolean isExist = userRepository.existsByUsername(username);

    if(isExist) {
        return false;
    }

    JwtUser user = new JwtUser();

    user.setUsername(username);
    user.setPassword(bCryptPasswordEncoder.encode(password));
    user.setRole("ROLE_ADMIN");

    userRepository.save(user);

    return true;
}

 

○ 회원가입 JoinController

public class JoinController {
    private final JoinService joinService;

    public JoinController(JoinService joinService){
        this.joinService = joinService;
    }

    @PostMapping("/join")
    public String joinProcess(JoinDto joinDto){
        joinService.joinProcess(joinDto);

        return "OK";
    }
}

// 이 당시 user.setRole에서 "ROLE_ADMIN"이 아닌 "ADMIN"으로 설정해줬었다.

// 하지만 이렇게 작성했을때 토큰이 정상적으로 검증되지 않았는데 두 방식의 차이에서 나타나는 오류였다.

 

ROLE_ 접두사 사용 ("ROLE_ADMIN")

  • ROLE_ 접두사는 Spring Security와 같은 보안 프레임워크에서 역할 이름을 구분하는 데 사용되는 표준
  • 예를 들어, Spring Security에서는 사용자의 권한(role)을 나타낼 때 ROLE_ 접두사를 붙여서 저장하는 것이 일반적
  • 이 방식은 역할을 다른 일반적인 문자열과 구분할 수 있음

접두사 없이 사용 ("ADMIN")

  • 더 간단하고 자유로운 형태입니다. 보통은 역할을 저장하는 데 있어 단순한 문자열을 사용하는 경우
  • ADMIN, USER, MODERATOR와 같이 역할을 정의할 수 있으며, ROLE_ 접두사를 붙이지 않는 경우
  • 보안 프레임워크에 의존하지 않고 자체적인 역할 관리 방식을 사용하는 경우 이와 같은 형식 사용

즉 Spring Security 프레임워크를 사용하는 시스템에서 표준을 어겼기 때문에 생겨나는 오류였다. 

 

public enum MemberRole {

    USER("ROLE_USER", "일반 사용자"),
    OWNER("ROLE_OWNER", "음식점 점주"),
    ADMIN( "ROLE_ADMIN", "시스템 관리자")
    ;

    private final String role;
    private final String description;
}

 

TableQ를 제작했던 소스코드로 ENUM 사용할 때 역시 ROLE_ 접두사를 사용한 게 보인다.

당시 본인이 구현했던 내용이 아니라 이 부분을 놓쳤는데 확실히 뇌에 박혔다.

'Java > SpringBoot' 카테고리의 다른 글

JWT 로그인 테스트-4  (0) 2025.01.22
JWT 로그인 테스트-2  (0) 2025.01.19
JWT 로그인 테스트-1  (0) 2025.01.19