Spring Security의 filter chain에 있는 필터들을 알아보자!

 


Spring Security의 기본필터를 알아보는 시리즈

 

Security 기본 필터는 뭐 있을까? 😗

스프링 시큐리티를 내 스프링 프로젝트에서 사용하고 있다면, 모두들 눈으로 보진 않았지만 뒤에서 돌아가고 있는 기본 필터를 알아보자 ! 스프링 공식 문서에서 안내하는 기본 필터는 아래와

lsmman.tistory.com


바로 들어가자 - doFilter

ChannelProcessingFilter 의 doFilter 부분을 가지고 왔다.

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
      throws IOException, ServletException {
   HttpServletRequest request = (HttpServletRequest) req;
   HttpServletResponse response = (HttpServletResponse) res;
   FilterInvocation filterInvocation = new FilterInvocation(request, response, chain);
   Collection<ConfigAttribute> attributes = this.securityMetadataSource.getAttributes(filterInvocation);
   if (attributes != null) {
      this.logger.debug(LogMessage.format("Request: %s; ConfigAttributes: %s", filterInvocation, attributes));
      this.channelDecisionManager.decide(filterInvocation, attributes);
      if (filterInvocation.getResponse().isCommitted()) {
         return;
      }
   }
   chain.doFilter(request, response);
}

 

여기서 핵심은 channelDecisionManager.decide 이다.

this.channelDecisionManager.decide(filterInvocation, attributes);

 

ChannelDecisionManager 의 decide 의 구현체를 보면,

ANY_CHANNEL이라는 attribute가 포함되어 있으면 바로 리턴을 해주고,

ChannelProcessor가 지정되어 있으면 decide 메소드로 연결되어 있다.

 

ChannelProcessor가 무엇인가하면 프로토콜에 따라 어떻게 요청을 처리할 지 각 채널 (http, https 등) 처리를 관리하는 프로세서이다.

ChannelProcessor의 구현체는 2개 있는데 Spring으로 주로 web 요청을 처리하기 때문에,

InsecureChannelProcessor는 http를, SecureChannelProcessor는 https를 처리하는 걸로 알고 있으면 된다

 

조금 더 자세하게는 각 프로세스 안에서는 AbstractRetryEntryPoint의 commence라는 동작으로 연결되는데, 

port와 request 형태, EntryPoint를 잡아주는 동작을 하고 있고

AbstractRetryEntryPoint 구현체는 RetryWithHttpEntryPoint, RetryWithHttpsEntryPoint 2개 있다.


RetryWithHttpsEntryPoint는 이렇게 생겼다. 

 

실은 조사한 건 여기까지인데,

아쉬우니 chatGPT의 설명을 끝으로 마치려한다.

 ChannelProcessingFilter는 웹 애플리케이션에 대한 요청의 인증 및 승인을 처리하는 데 사용되는 Spring Security 프레임워크의 클래스입니다.

이 필터는 들어오는 요청을 검사하고 어떤 보안 속성이 적용되는지 결정한 다음 인증 및 권한 부여 프로세스를 Spring Security 프레임워크 내의 적절한 구성 요소에 위임하는 역할을 합니다.

ChannelProcessingFilter는 HTTPS와 같은 보안 채널이 필요한 요청을 처리하도록 특별히 설계되었으며 필요한 경우 요청을 보안 채널로 리디렉션할 수 있습니다. 일반적으로 AuthenticationFilter 및 AuthorizationFilter와 같은 다른 보안 필터보다 먼저 필터 체인의 초기에 배치됩니다.

전반적으로 ChannelProcessingFilter는 웹 애플리케이션에 대한 요청이 적절하게 인증 및 승인되고 민감한 정보가 네트워크를 통해 안전하게 전송되도록 하는 데 도움이 되는 Spring Security 프레임워크의 중요한 구성 요소입니다.

Bye!

 

ChannelProcessingFilter 웹 요청이 어떤 프로토콜로 (http 또는 https) 전달되어야 하는지 처리
SecurityContextPersistenceFilter SecurityContextRepository를 통해 SecurityContext를 Load/Save 처리
LogoutFilter 로그아웃 URL로 요청을 감시하여 매칭되는 요청이 있으면 해당 사용자를 로그아웃 시킴
UsernamePasswordAuthenticationFilter ID/비밀번호 기반 Form 인증 요청 URL(기본값: /login) 을 감시하여 사용자를 인증함
DefaultLoginPageGeneratingFilter 로그인을 수행하는데 필요한 HTML을 생성함
RequestCacheAwareFilter 로그인 성공 이후 인증 요청에 의해 가로채어진 사용자의 원래 요청으로 이동하기 위해 사용됨
SecurityContextHolderAwareRequestFilter 서블릿 3 API 지원을 위해 HttpServletRequest를 HttpServletRequestWrapper 하위 클래스로 감쌈
RememberMeAuthenticationFilter 요청의 일부로 remeber-me 쿠키 제공 여부를 확인하고, 쿠키가 있으면 사용자 인증을 시도함
AnonymousAuthenticationFilter 해당 인증 필터에 도달할때까지 사용자가 아직 인증되지 않았다면, 익명 사용자로 처리하도록 함
ExceptionTranslationFilter 요청을 처리하는 도중 발생할 수 있는 예외에 대한 라우팅과 위임을 처리함
FilterSecurityInterceptor 접근 권한 확인을 위해 요청을 AccessDecisionManager로 위임

 

'Java Spring > Spring Security' 카테고리의 다른 글

[Big Picture] Spring Security  (0) 2023.06.21
Security 기본 필터는 뭐 있을까? 😗  (0) 2023.04.14

+ Recent posts