spring-security + JWT 이용 로그인(4) - 토큰 이용 API 호출

홍현기·2025년 3월 31일
0

앞서

토큰을 이용하여 유저정보를 가져오는 API를 만들어보자


JwtUtil 수정

//클레임 추출
public Claims extractClaims(String token){
    return Jwts.parser()
            .setSigningKey(secretKey)
            //.parseClaimsJwt(token)
            .parseClaimsJws(token)
            .getBody();
}
  • 클레임 추출하는 부분에 parseClaimsJwt > parseClaimsJws 로 변경, 서명이 포함된 JWT를 사용할 때 parseClaimsJws를 사용해야 합니다
  • 코딩중 해당 메서드 사용시 에러나는걸 발견했다.. 수정해주자

UserController

package com.hkhong.study.controller;

import com.hkhong.study.util.JwtUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequiredArgsConstructor
@RestController
@RequestMapping("/user")
public class UserController {

    private final JwtUtil jwtUtil;

    @GetMapping("")
    public ResponseEntity<?> getUserInfo(@RequestHeader("Authorization") String token){
        // "Bearer " 문자열을 제거
        token = token.substring(7);

        // 유저정보 리턴
        return ResponseEntity.ok(jwtUtil.extractClaims(token));
    }
}
  • @RequestHeader("Authorization"): 요청시 헤더에 키 값이 ' Authorization' 인 값을 파라미터로 받아 유저정보를 리턴해 주었다.

실행 및 동작 순서

  • 유저정보를 조회하는 API 호출 시 동작이 어떻게 되는지 알아보자

1. doFilterInternal

  • 첫번째로 당연히 필터를 거치게 되고, 작성자는 위와 같이 디버그를 걸어 살펴봤다.
  • chain.doFilter(request, response); 라인에 디버그 포인트를 설정한 후, 디버그 모드에서 필터 내 SecurityContextHolder.getContext() 를 확인했을 때, 아래와 같이 SecurityContextHolder 객체에 사용자 정보가 정상적으로 저장된 것을 확인할 수 있다.

2. getUserInfo

  • 두번째로 작성해둔 유저정보조회 API를 수행한다.

3. 결과

  • 이와같이 유저정보를 출력해주는걸 확인할 수 있다.

마치며

이렇게해서 spring-security + jwt 을 이용해서 로그인 및 유저정보 API까지 호출해 보았고, 마무리하도록 하겠다.

0개의 댓글