티스토리 뷰

반응형
  • spring security 설정을 한 뒤, 로그인 테스트 중
Caused by: java.lang.NullPointerException: null
    at com.swg.web.service.LoginService.loadUserByUsername(LoginService.java:32) ~[main/:na]
    at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:93) ~[spring-security-core-5.4.1.jar:5.4.1]
    ... 54 common frames omitted
  • loadUserByUsername()에서 nullException이 나와 확인을 해보니 파라미터로 전달 받은 username이 null로 넘어온것이 확인됬다...
@RequiredArgsConstructor  
@EnableWebSecurity  
public class SecurityConfig extends WebSecurityConfigurerAdapter {  
    private final LoginService loginService;

...

@Override  
protected void configure(AuthenticationManagerBuilder auth) throws Exception {  
    auth  
    .userDetailsService(loginService)  
    .passwordEncoder(passwordEncoder());  
  }  
}
@Service  
@RequiredArgsConstructor  
public class LoginService implements UserDetailsService {  
    private final UserService userService;

    @Override  
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {  
        Optional<com.swg.common.domain.User> memberEntityWrapper = userService.findByNickNm(username); //NullPointerException 발생  
        com.swg.common.domain.User userEntity = memberEntityWrapper.orElse(null);

        List authorities = new ArrayList<>();  
        authorities.add(new SimpleGrantedAuthority(userEntity.getRole().getKey()));

        return new User(userEntity.getNickNm(), userEntity.getPwd(), authorities);
    }
}
  • 구글링 해보니,
    • 매개변수 전달시 매개 변수명은 닉네임의 경우 username, 비밀번호의 경우 password로 넘겨줘야하고
    • Content-Type을 application/x-www-form-urlencoded로 전달해야 한다고 한다...
  • 작업했던 코드를 확인해보니 json으로 넘겨주고 있어, application/x-www-form-urlencoded로 변경해주니 정상적으로 로그인이 되는것이 확인되었다...
  const data = {
        username: $('#nickNm').val(),
          password: $('#pwd').val()
  };

  $.ajax({
      type: 'POST',
      url: '/signup',
      dataType: 'json',
      contentType: 'application/json; charset=utf-8',
      data: JSON.stringify(data)
  }).done(function (res) {
      alert("회원가입 되었습니다.");
      location.href = "/"
  }).fail(function (error) {
      alert(JSON.stringify(error));
  });

// ->

const data = {
    username: $('#nickNm').val(),
    password: $('#pwd').val()
};

$.ajax({
    type: 'POST',
    url: '/signin',
    dataType: 'json',
    contentType: 'application/x-www-form-urlencoded; charset=utf-8',
    data: data
}).done(function (res) {
    alert("로그인 되었습니다.");
    location.href = "/"
}).fail(function (error) {
    alert(JSON.stringify(error));
});

 

 


반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함