728x90
Spring Security 적용JWT(Json Web Token) 발급Token Filter 계층 추가 및 권한 부여- Token 유효성 검사
- Token 데이터 파싱
Token 유효성 검사
Token이 존재하지 않으면 권한을 부여하지 않는다.
현재는 Token 정보가 없어도 해당 API가 잘 실행되고 있습니다.
HttpHeader로 넘어온 AUTHORIZATION의 정보를 받아서 토큰을 파싱 해봅시다.
- Class에 @Slf4j 어노테이션을 추가하여 값들을 잘 가지고 오는지 log에 띄웁시다.
@RequiredArgsConstructor
@Slf4j
public class JwtFilter extends OncePerRequestFilter {
private final UserService userService;
private final String secretKey;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
final String authorization = request.getHeader(HttpHeaders.AUTHORIZATION);
log.info("authorization = {}", authorization);
// Token이 없을 시 막습니다.
if (authorization == null) {
log.error("authorization이 없습니다.");
filterChain.doFilter(request, response);
return;
}
...
}
테스트
Token을 보내지 않을 때
허가가 나지 않는다.
Token을 함께 보낼 때
성공적으로 작동된다.
한 번 더 생각하기
현재 상태로는 주어진 Token뿐 아니라 임의의 값을 넣어도 통과되기 때문에, 특정 조건들을 더 주어져야 한다.
...
public class JwtFilter extends OncePerRequestFilter {
...
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
...
// Token이 없을 시 막습니다.
if (authorization == null || !authorization.startsWith("Bearer ")) {
log.error("authorization을 잘못 보냈습니다");
filterChain.doFilter(request, response);
return;
}
...
}
if문에 조건을 추가합니다.
JwtUtil에서 isExpired 메서드 추가
public class JwtUtil {
public static boolean isExpired(String token, String secrectKey) {
return Jwts.parser().setSigningKey(secrectKey).parseClaimsJws(token)
.getBody().getExpiration().before(new Date());
}
...
}
HttpHeader에서 Token 분리
Token Expired 확인
...
public class JwtFilter extends OncePerRequestFilter {
...
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
...
// 토큰 꺼내기
String token = authorization.split(" ")[1];
// Token expried 확인
if(JwtUtil.isExpired(token, secretKey)){
log.error("토큰이 만료되었습니다.");
filterChain.doFilter(request, response);
return;
}
...
}
}
테스트
Token을 발급받은 후 create Review를 해보겠습니다.
리뷰 등록이 잘 되는 것을 확인할 수 있습니다.
그렇다면, Token에 임의의 값을 넣는다면 이번엔 어떤 결과가 나올까요?
임의의 Token 입력
Token이 일치하지 않아 거부당하는 상황을 볼 수 있습니다.
반응형
'회고록 > Archive' 카테고리의 다른 글
[GitBlog] 깃 허브 블로그 셋팅 (0) | 2022.12.14 |
---|---|
[Spring Security & JWT] 5. Token 값 꺼내오기 (1) | 2022.12.07 |
[Spring Security & JWT] 3. Token Filter 계층 추가 및 권한 부여 (0) | 2022.12.06 |
[Spring Security & JWT] 2. JWT(Json Web Token) 발급 (0) | 2022.12.06 |
[Spring Security & JWT] 1. Security 적용 (0) | 2022.12.06 |