• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

강사님 로그인 요청시 궁금한 점이 있습니다.

23.11.14 15:44 작성 23.11.14 16:08 수정 조회수 183

0

POST /login으로 요청시

JwtAuthenticationFilter는 실행되지만

JwtAuthorizationMacFilter는 왜 실행되지 않는 이유가 궁금합니다.

 

FilterChainProxy에 additionalFilters 목록을 보게 되면, JwtAuthenticationFilter와 JwtAuthorizationFilter가 담겨있고 UsernamePasswordAuthenticationFilter앞에 있는것을 확인할 수 있는데, JwtAuthorizationMacFilter을 넘어가는 이유가 뭔지 궁금합니다

 


 

디버깅 중에 왜 안나왔는지 알게되었네요

JwtAuthenticationFilter는 인증 성공후에 doFilter 를 안넘겨서 그 이후 체인이 실행하지 않아 검증 필터가 실행되지 않았습니다.

 

혹시 체인을 안태운 이유가 가장 마지막 필터인 FilterSecurityInterceptor or AuthorizationFilter 에서 SecurityContextHolder.getContext().getAuthentication 에 null 체크 예외 발생 때문에 일부러 안넘기신건가요??

 

토큰 인증 필터 성공 이후에 체인 안넘기신 이유가 궁금합니다.

안넘기게 되면 컨트롤러단까지 요청이 안가서 index 페이지가 안나와서

답변 2

·

답변을 작성해보세요.

0

답변이 늦어 죄송합니다

우선 JwtAuthorizationMacFilter 는 chain.doFilter(request, response) 구문을 실행하고 있습니다.

코드의 맨 마지막 줄에 보시면 구현되어 있습니다.

혹시 소스 코드를 보여 주실 수 있을까요?

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.11.16

안녕하세요 hangs0908 님, 인프런 AI 인턴이에요.

JwtAuthenticationFilter 와 JwtAuthorizationFilter가 FilterChainProxy의 additionalFilters 목록에 있음에도 불구하고 JwtAuthorizationFilter가 실행되지 않는 이유에 대해 궁금하신 것 같습니다.

일반적으로 Spring Security의 FilterChain은 요청을 처리할 때, 필터들을 순차적으로 실행하며 이전 필터가 다음 필터로 넘기는 역할을 합니다.

JwtAuthenticationFilter는 인증 성공 후에 doFilter를 호출하지 않아서 그 이후의 필터 체인이 실행되지 않아 JwtAuthorizationFilter까지 도달하지 못한 것으로 보입니다.

아마도 체인을 안 넘기신 이유는 JwtAuthenticationFilter에서 인증이 성공한 경우 SecurityContextHolder에 인증 정보를 저장하고 다음 처리를 스킵하여 추가적인 인증 필터를 거치지 않고 바로 컨트롤러로 넘어가게 하기 위함일 것입니다.

이 과정에서 일부러 체인을 건너뛴 것으로 보입니다.

따라서 JwtAuthenticationFilter에서 인증이 성공하고 나서 체인을 넘기지 않은 이유는, 컨트롤러로 요청을 전달하여 index 페이지가 올바르게 나올 수 있도록 하는 것일 것입니다.

정확한 이유에 대해서는 코드의 구현 및 개발자의 의도에 따라 다를 수 있으므로, 해당 프로젝트의 구현 상황을 확인하시는 것이 가장 정확한 답변을 얻으실 수 있을 것입니다. 감사합니다!