[Spring Security] 로그인 필터 구현 중 username 제대로 못 받아오는 이슈

Jin·2024년 10월 22일
2

공부중인 영상
요즘? 이 영상 참고해서 JWT로그인을 구현해보고 있다.
코드 상황은 이랬다.

  1. UserInfo
public class UserInfo {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="user_id")
    private int userId;

    private String password;
	private String nickname;
    
    private String role;
  1. LoginFilter.class
    @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

profile
go-getter

2개의 댓글

comment-user-thumbnail
2024년 11월 6일

님아 다음글 주세요

1개의 답글

관련 채용 정보