본문 바로가기
개발/Spring

[Spring Security] Cannot pass a null GrantedAuthority collection

by 상용최 2021. 3. 26.
반응형

오랜만에 Spring Boot와 Spring Security를 이용하여 간단한 개인 프로젝트를 진행하고 있었다.

코딩할 때 정말 필요한 코드만 작성하는것이 목적이었다.

 

엔티티를 만들때도 필요한 컬럼만을 작성하기 위하여 아래의 컬럼만 가지고 있었다.

@Entity
public class Member extends BaseTimeEntity {

    @Id
    private String id;
    private String password;
    private String name;
    private Boolean isVerified;
    
}

 

Spring Security를 연동한 후 회원가입이 정상적으로 되는것까지 확인했다.

하지만 정보를 맞게 입력했지만 Login이 되지않는 오류가 나타났다.

 

 

로그인에 필요한 UserDetailsService는 아래와 같이 구현했다.

왜 이러한 오류가 나는지 디버깅을 해보았다.

 

@Service
public class UserDetailService implements UserDetailsService {

    private final MemberRepository memberRepository;

    public UserDetailService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

    @Override
    public UserDetails loadUserByUsername(String id) throws UsernameNotFoundException {
        final Member member = memberRepository.findById(id)
                .orElseThrow(() -> new UsernameNotFoundException("존재하지 않는 유저입니다."));

        return User.builder()
                .username(member.getId())
                .password(member.getPassword())
                .build();
    }
}

 

원인은 메세지와 같이 GrantedAuthority Collection이 null이기 때문에 오류가 발생했다.

return User.builder().username().password().build() 부분에서 문제가 발생했다.

User의 생성자에 아래와 같은 구문이 있고 sortAuthorities 메소드를 들어가보면 아래와 같은 구문이 존재한다.

User 객체를 만들 때 authorities에 값을 넣지 않으면 안되는것 같다.

authorities를 설정해주면 정상적으로 로그인이 된다.

반응형

댓글