728x90
Spring Security 적용JWT(Json Web Token) 발급Token Filter 계층 추가 및 권한 부여Token 유효성 검사- Token 데이터 파싱
Token 데이터 파싱
- JwtUtil.Class에서 getUserName 메서드 생성
getUserName 메서드 생성
JwtUtil.Class 안에 메서드를 생성합니다.
getUserName 메서드 첫 번째 방법
public static String getUserName(String token, String key) {
return extractClaims(token, key).get("userName").toString();
}
getUserName 메서드 두번째 방법
public class JwtUtil {
public static String getUserName(String token, String secretKey){
return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token)
.getBody().get("userName", String.class);
}
...
}
차이점
두번 째 방법에 있는. get이 타입을 줄 수 있기 때문에 상황에 따라 다르게 사용한다.. get("userName", String.class); <-- 타입을 줄 수 있다.
결론은 스트링만 꺼낼 것이면 위든 아래든 상관이 없다.
JwtFilter. UserName을 Token에서 꺼내기
...
public class JwtFilter extends OncePerRequestFilter {
...
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
...
// user name token에서 꺼내기
String userName = JwtUtil.getUserName(token, secretKey);
log.info("userName = {}", userName);
...
}
Controller에서 해당 정보 사용하기
Review Controller 수정
- writeReview() 매개변수에 Authentication 추가
public class ReviewController { @PostMapping public ResponseEntity<String> writeReview(Authentication authentication){ return ResponseEntity.ok().body(authentication.getName() + "님의 리뷰 등록이 완료 되었습니다."); } }
테스트
/api/v1/reviews를 보낸 결과 authentication.getName()이 잘 안된 것을 볼 수 있다.
userName이 꺼내지지 않은 것으로 보이는데, 그 이유는 UserController에서 Login을 만들 때 null 값을 보내고 있기 때문이다.
UserLoginRequest Dto 생성
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class LoginRequestDto {
private String userName;
}
UserController Login API 매개변수 추가하기
...
public class UserController {
private final UserService userService;
@PostMapping("/login")
public ResponseEntity<String> login(@RequestBody LoginRequestDto dto){
return ResponseEntity.ok().body(userService.login(dto.getUserName(),""));
}
}
다시 테스트
1. 이번에는 BODY에 userName을 담아 Token을 발급 받겠습니다.
2. 받은 Token을 사용하여 리뷰를 등록하겠습니다.
Token에 담긴 userName 정보를 꺼낸 것을 볼 수 있습니다.
반응형
'회고록 > Archive' 카테고리의 다른 글
[Project] 00. SNS 웹 서비스 [개요] (0) | 2022.12.20 |
---|---|
[GitBlog] 깃 허브 블로그 셋팅 (0) | 2022.12.14 |
[Spring Security & JWT] 4. Token 유효성 검사 (0) | 2022.12.06 |
[Spring Security & JWT] 3. Token Filter 계층 추가 및 권한 부여 (0) | 2022.12.06 |
[Spring Security & JWT] 2. JWT(Json Web Token) 발급 (0) | 2022.12.06 |