관리 메뉴

개발하는 동그리

jwt 로그인에서 API Controller 호출 2번되는 이유 본문

IT 정보/Error

jwt 로그인에서 API Controller 호출 2번되는 이유

개발하는 동그리 2022. 9. 5. 14:48
반응형

API Controller 호출이 계속 2번씩 이루어지고 있다. 계속 이유를 찾아보았지만 찾을 수 없었다.

결국 알아낸 해결방법은 아래 방법이다. 

public class JwtAuthorizationFilter extends BasicAuthenticationFilter {

    private MemberRepository memberRepository;

    public JwtAuthorizationFilter(AuthenticationManager authenticationManager, MemberRepository memberRepository) {
        super(authenticationManager);
        this.memberRepository = memberRepository;
    }

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
        String jwtHeader = request.getHeader(JwtProperties.HEADER_STRING);

        if (jwtHeader == null || !jwtHeader.startsWith(JwtProperties.TOKEN_PREFIX)) {
            chain.doFilter(request, response);
            return;
        }
        String jwtToken = jwtHeader.replace(JwtProperties.TOKEN_PREFIX, "");

        String username = JWT.require(Algorithm.HMAC512(JwtProperties.SECRET)).build().verify(jwtToken).getClaim("username").asString();

        if (username != null) {
            Member memberEntity = memberRepository.findByUsername(username);

            PrincipalDetails principalDetails = new PrincipalDetails(memberEntity);
            Authentication authentication = new UsernamePasswordAuthenticationToken(principalDetails, null, principalDetails.getAuthorities());
            SecurityContextHolder.getContext().setAuthentication(authentication);
            chain.doFilter(request, response);
        }
            super.doFilterInternal(request, response, chain);
    }
}

 

맨 아래부분을 else 로 감싸주면 중복호출되는 문제가 해결된다. 

else {
    super.doFilterInternal(request, response, chain);
}

 

휴~

반응형