반응형
오랜만에 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를 설정해주면 정상적으로 로그인이 된다.
반응형
'개발 > Spring' 카테고리의 다른 글
[Spring Security] Login 이 성공했을 때 후처리를 어떻게 할 수 있을까? (1) | 2021.04.03 |
---|---|
[Spring Security] Spring Security Login 테스트코드 만들기 (0) | 2021.03.26 |
[Spring] controller unit test with csrf (1) | 2021.03.17 |
[Spring] @DataJpaTest (0) | 2021.03.14 |
[Spring] Controller에 파라미터 바인딩은 어떻게 이루어질까 ? (0) | 2021.01.26 |
댓글