오늘의 오류 | Spring Security, loadUserByUsername, 권한 설정

Seeun Park·2022년 3월 22일
1

오늘의 오류

목록 보기
1/3

Intro

요새 Spring 심화, JPA를 학습할 겸 개인 프로젝트를 만들고 있다. 만들면서 어김없이 수많은 막히는 벽들이 등장했다. 오류를 싫어하는 개발자도 많겠지만 나는 오히려 즐겁다. 수학문제를 풀듯이 해결하는 재미가 있다.

Spring Security를 만들면서 여러가지 오류가 발생했지만 그 중에서 하나를 적어보려고 한다.

이게 왜?

Spring Security에서는 기본적으로 설정이 없으면 다른 루트로 이동 시에 로그인을 우선적으로 하도록 설정 되어있다.

하지만 !

분명 SecurityConfiguration에 권한 없이 열 수 있도록 한 페이지를 지정해놨다.
그런데 권한이 필요한 기능들을 실행해도 로그인 페이지로 이동하는 것이 아닌 널포인트 에러가 떴다.
에러 로그를 봐도 어디가 문제인지 알 수가 없었다.

그래서 생각없이 애꿎은 SecurityConfiguration 파일만 이리저리 구글링 해가며 변경했다.
그러다 수많은 구글링 끝에 클론코딩으로 정답을 찾아 냈다.

문제는 ... loadUserByUsername 작성시에 아래와 같이 권한 설정을 임의의 값으로 설정을 해버린 것이었다.

문제 발생 코드

public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
		...
       List<GrantedAuthority> grantedAuthorities = new ArrayList<>();
       grantedAuthorities.add(new SimpleGrantedAuthority("USER"));

       if (RoleType.ADMIN.equals(member.getRoleType())) {
           grantedAuthorities.add(new SimpleGrantedAuthority("ADMIN"));
       }
		...
}

사실을 아래와 같이 지정된 값으로 설정해줘야 된다.

정답 코드

public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
		...
        List<GrantedAuthority> grantedAuthorities = new ArrayList<>();
        grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_USER"));

        if (RoleType.ADMIN.equals(member.getRoleType())) {
            grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
        }
        ...
}

로그인의 권한에 관련해서 문제가 발생한다면 코드를 천천히 확인해보자 !

0개의 댓글