존재하지 않는 회원이 로그인을 할 때 500에러가 발생.
이슈 내용 :
JpaRepository
를 상속받은UserRepository
에서Optional
클래스를 사용한User
객체를 사용하는 조건에서 존재하지 않는 회원ID로 로그인을 시도할 때 500에러를 발생함.해결 방법 :
UserRepository
에서Optional<User>
을User
로 변경. 자세한 설명은 하기 ~를 참고.
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByUsername(String username);
public class UserDetailsServiceImpl implements UserDetailsService {
~
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Optional<User> user = userRepository.findByUsername(username);
return new UserDetailsImpl(user.get());
public class JWTAuthProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(Authentication authentication)
Optional<User> user = userRepository.findUserByUsername(username).get();
java.util.NoSuchElementException: No value present
at java.base/java.util.Optional.get(Optional.java:143) ~[na:na]
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
public class UserDetailsServiceImpl implements UserDetailsService {
~
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findUserByUsername(username);
return new UserDetailsImpl(user);
public class JWTAuthProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(Authentication authentication)
User user = userRepository.findUserByUsername(username);
public class FormLoginAuthProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
UserDetailsImpl userDetails = (UserDetailsImpl) userDetailsService.loadUserByUsername(username);
if (userDetails.getUser() == null){
throw new UsernameNotFoundException("이메일 주소가 존재하지 않습니다.");
}
Optional<User>
변수를 선언 후 .get()
메소드로 가져올 때 Optional
이 비어있을 때 NoSuchElementException
이 반환된다. Optional
을 사용하여 반환된 값은 null이 아닌 공란값이며 공란값을 .get()
하기에 java.util.NoSuchElementException: No value present
이 발생하는 것이다.