공부중인 영상
요즘? 이 영상 참고해서 JWT로그인을 구현해보고 있다.
코드 상황은 이랬다.
public class UserInfo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="user_id")
private int userId;
private String password;
private String nickname;
private String role;
@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException{
String nickname = obtainUsername(request);
String password = obtainPassword(request);
System.out.println(nickname);
UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(nickname,password,null);
return authenticationManager.authenticate(authToken);
}
그런데......일단 잘 받아오나 확인하려는데
외않되?
스프링 시큐리티는 username, password변수 기반으로 작동해서 나처럼 다른 값을 넣으면 원하는 대로 작동이 안된다는 것이다.
나는 위에 Userinfo에서도 보듯이 nickname을 username이랍시고 사용하고 있었다.
UsernamePasswordAuthenticationFilter 에서 제공해주는 setUsernameParameter 함수를 활용하면 된다.
@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException{
setUsernameParameter("nickname"); // 이거 추가하면 됨!!
String nickname = obtainUsername(request);
String password = obtainPassword(request);
System.out.println(nickname);
UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(nickname,password,null);
return authenticationManager.authenticate(authToken);
}
시큐리티는 참 많은 기능을 제공해주는데... 너무 제공해줘서 더 어렵게 느껴지는 거 같기도.
출처)
영상 댓글 및 spring security docs
님아 다음글 주세요