20220627 WIL

Don Lee·2022년 6월 26일
0

EpiTIL

목록 보기
22/24
post-custom-banner

존재하지 않는 회원이 로그인을 할 때 500에러가 발생.

이슈 내용 : JpaRepository를 상속받은 UserRepository에서 Optional클래스를 사용한 User객체를 사용하는 조건에서 존재하지 않는 회원ID로 로그인을 시도할 때 500에러를 발생함.

해결 방법 : UserRepository에서 Optional<User>User로 변경. 자세한 설명은 하기 ~를 참고.

  • Before
    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]
  • After
    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);
  • Why
    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이 발생하는 것이다.
profile
쾌락코딩
post-custom-banner

0개의 댓글