JWT - 사용자 로그인 요청시 토큰을 생성하여 응답하기

최고요·2023년 5월 3일
8

JWT V1 

목록 보기
14/15
post-thumbnail

JwtAuthenticationFilter 의 successfulAuthentication 메서드

    // 순서 ->  attemptAuthentication 에서 인증이 정상적으로 실행되고 successfulAuthentication 메서드 실행
    // JWT 토큰을 만들어서 request 요청한 사용자에게 토큰을 응답과함께 전달
    @Override
    protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException {
        System.out.println("사용자 인증이 완료되어 successfulAuthentication 메서드가 실행됩니다.");

        PrincipalDetails principalDetails = (PrincipalDetails)authResult.getPrincipal();

        // 빌드패턴으로 토큰 생성하기
        String jwtToken = JWT.create()
                .withSubject(principalDetails.getUsername()+"님의 토큰")
                .withExpiresAt(new Date(System.currentTimeMillis()+(6000*10))) // 토큰의 유효시간 10분으로 지정
                .withClaim("id", principalDetails.getUser().getId())
                .withClaim("username", principalDetails.getUser().getUserName())
                .sign(Algorithm.HMAC512("server-secret")); // server만 알고있는 secret값 으로 서명

        response.addHeader("Authentication","Bearer "+jwtToken);  // 사용자에게 응답
        System.out.println("==================토큰 생성==================");
        System.out.println("name : Authentication");
        System.out.println("value: Bearer "+ jwtToken);

    }

사용자 인증이 성공적으로 완료된 후 실행되는 successfulAuthentication 메서드입니다.
이 메서드의 주요 목적은 인증된 사용자에게 JWT 토큰을 생성하고 응답과 함께 전달하는 것입니다. 코드 설명은 다음과 같이 진행할 수 있습니다.

  1. successfulAuthentication 메서드는 인증이 성공한 후 호출됩니다.

  2. 인증 결과(authResult)에서 PrincipalDetails 객체를 가져옵니다. 이 객체는 인증된 사용자의 정보를 포함하고 있습니다.

  3. JWT 토큰을 생성하기 위해 JWT.create()를 호출하고, 이어서 다음 작업을 수행합니다:

  • 사용자 이름을 서브젝트로 설정합니다.
  • 토큰의 만료 시간을 현재 시간으로부터 10분 후로 설정합니다.
  • 사용자의 ID와 사용자 이름을 클레임으로 추가합니다.
  • 서버의 비밀 키("server-secret")를 사용하여 토큰을 서명합니다.
  1. 생성된 JWT 토큰을 응답 헤더에 추가합니다. 헤더 이름은 "Authentication"이고, 값은 "Bearer " + jwtToken입니다.


postman으로 로그인 완료시 클라이언트에게 토큰과함께 응답하는지 확인하기


json 방식으로 로그인 요청을 했을 때
정상적으로 사용자 인증이되면 successfulAuthentication 메서드에서 토큰을 만들어 응답 헤더에 토큰값을 넣어줍니다.

Authentication 의 value값으로 토큰이 잘 들어간 것을 확인할 수 있습니다.

profile
i'm best

0개의 댓글