본문 바로가기
spring

permitAll()로 요청한 api들이 JwtFilter를 거쳐서 가는 문제

by kdozlo 2024. 4. 29.

permitAll()로 요청한 api들이 JwtFilter를 거쳐서 가는 문제

문제 상황

  • S3에 이미지 업로드 테스트 과정에서 해당 요청 api는 생각해보니 현재 jwt 필터를 거치지 않아도 될 api들이 모두 jwt 필터를 거치고 있었다. 권한 확인만 하지 않고 지나갔을 뿐.

문제 원인

  • 이유는 간단하다. permitAll()로 했기 때문이다. permitAll()은 시큐리티 필터를 무시하는게 아니고 그냥 지나쳐 가라는 뜻이였다. 이 경우 시큐리티 필터 자체를 지나가지 않도록 ignore로 처리하면 된다. 하지만 BUT 그러면 spring security 자체를 쓰지 않게 되서 문제가 된다.

해결 방안

  • 따라서 Jwt 필터를 만난경우 필터 로직을 거지치 않도록 Jwt 필터 class에 shouldNotFilter 메서드를 작성해주면 된다.
    @Value("${WHITE_LIST}")
    private String[] whiteList;

    @Override
    protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException {
        return Arrays.stream(whiteList)
                        .anyMatch(request.getRequestURI()::startsWith);
    }