카테고리 없음
SpringBoot - security.authentication.InternalAuthenticationServiceException: null
socialcomputer
2022. 4. 13. 17:17
반응형
2022-03-31 21:35:08.076 ERROR 4740 --- [nio-8088-exec-4] w.a.UsernamePasswordAuthenticationFilter : An internal error occurred while trying to authenticate the user. org.springframework.security.authentication.InternalAuthenticationServiceException: null at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:108) ~[spring-security-core-5.6.1.jar:5.6.1] at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(Abstrac
--------- --------- ------- 중 략 --------- ---------- --------
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.56.jar:9.0.56] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: java.lang.NullPointerException: null at com.example.myproject.config.auth.PrincipalDetailsService.loadUserByUsername(PrincipalDetailsService.java:23) ~[classes/:na] at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:93) ~[spring-security-core-5.6.1.jar:5.6.1] ... 60 common frames omitted
이 문제는 authentication 객체가 null이 되어 생긴 오류다. 일반로그인 서비스를 수정했다.
회원저장소에서 찾지 못하면 로그인 실패가 되도록 해야 하는데
예전 코드는 return null 을 해줘서 null인 인증객체가 들어가 오류가 난 것 같다.
그래서 유저를 찾을수 없다는 로그인실패 예외를 던져 해결했다.
if ( userRepository.findByUsername(username)==null ){
throw new UsernameNotFoundException(username)
}
아래는 수정한 코드이다.
/**
* 일반 로그인, 자동 로그인 (자동 회원가입x)
*/
@RequiredArgsConstructor
@Service
public class PrincipalDetailsService implements UserDetailsService {
private final UserRepository userRepo;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {// 로그인시키기
System.out.println(username);
User entity = userRepo.findByUsername(username);
System.out.println("loadUserByUsername: "+entity.getUsername()+","+ entity.getEmail()+","+ entity.getPassword());
if(entity==null){
throw new UsernameNotFoundException(username);
// 로그인 실패시 예외 던지기
}
return new PrincipalDetails(entity);
}
}
반응형