[Jwt] .permitAll()인 uri도 JwtFilter를 통과하며 에러로그를 내는 경우

Coastby·2022년 12월 22일
2

문제 해결

목록 보기
15/17

🚫 에러

SecurityConfiguraion에서 .permitAll()를 설정한 uri 요청(join, login 등)에도 JwtFilter를 거치면서 Authorization header에 관한 에러 로그 (authorization header가 없다는 로그)가 계속 남았다.
.permitAll()을 하면 filter를 아예 통과할거라 생각한 부분이 문제가 되었다.기능에는 문제가 없지만, 로그가 지속적으로 찍히는 것은 좋지 않기 때문에 이를 해결해야 한다.

⭕️ 해결

https://github.com/spring-projects/spring-security/issues/4368

아래 코드처럼 헤더가 없거나 형식이 다른 조건을 묶어서 처리했었다.

//헤더 형식 확인
if (authorizationHeader == null || !authorizationHeader.startsWith("Bearer ")){
    log.error("잘못된 헤더 형식 : {}", authorizationHeader);
    filterChain.doFilter(request, response);
    return;
}

Authorization header가 null일 때는 authentication에 null값을 넣어서 필터를 통과시켰다.
그리고 헤더가 있으나 헤더의 형식이 바르지 않을 때만 에러 로그를 찍도록 바꾸었다.

//헤더 형식 확인
if(authorizationHeader == null){
    SecurityContextHolder.getContext().setAuthentication(null);
    filterChain.doFilter(request, response);
    return;
}

String token = "";
if (authorizationHeader.startsWith("Bearer ")){
    token = authorizationHeader.replace("Bearer ", "");
} else{
    log.error("Authorization 헤더 형식이 틀립니다. : {}", authorizationHeader);
    filterChain.doFilter(request, response);
    return;
}
profile
훈이야 화이팅

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

몇 시간 동안 헤매다가 덕분에 해결했습니다 감사합니다!

답글 달기