728x90
SecurityFilterChain 구조
@EnableWebSecurity
에debug
모드를true
로 설정하면, 요청이 통과하는SecurityFilterChain
의filter
목록이 출력 된다.Spring Security
디버깅을 활성화하는 옵션으로, 개발 환경에서만 사용해야 한다.debug
모드의 기본값은false
이다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity(debug = true)
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain1(HttpSecurity http) throws Exception {
http.securityMatcher("/user");
return http.build();
}
@Bean
public SecurityFilterChain securityFilterChain2(HttpSecurity http) throws Exception {
http.securityMatcher("/admin");
return http.build();
}
}
application 구동 후 요청한 결과
2025-03-08T00:46:21.148+09:00 INFO 44398 --- [] [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 1 endpoint beneath base path '/actuator'
2025-03-08T00:46:21.184+09:00 WARN 44398 --- [] [ main] o.s.s.c.a.web.builders.WebSecurity :
********************************************************************
********** Security debugging is enabled. *************
********** This may include sensitive information. *************
********** Do not use in a production system! *************
********************************************************************
2025-03-08T00:46:21.391+09:00 INFO 44398 --- [] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
2025-03-08T00:46:21.398+09:00 INFO 44398 --- [] [ main] com.nimkoes.security : Started Application in 1.704 seconds (process running for 2.058)
2025-03-08T00:46:21.557+09:00 INFO 44398 --- [] [on(2)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2025-03-08T00:46:21.557+09:00 INFO 44398 --- [] [on(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2025-03-08T00:46:21.558+09:00 INFO 44398 --- [] [on(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
2025-03-08T00:48:50.772+09:00 INFO 44398 --- [] [nio-8080-exec-1] Spring Security Debugger :
************************************************************
Request received for GET '/user':
org.apache.catalina.connector.RequestFacade@9fc0b4c
servletPath:/user
pathInfo:null
headers:
user-agent: IntelliJ HTTP Client/IntelliJ IDEA 2024.3.1
accept-encoding: br, deflate, gzip, x-gzip
accept: */*
host: localhost:8080
Security filter chain: [
DisableEncodeUrlFilter
WebAsyncManagerIntegrationFilter
SecurityContextHolderFilter
HeaderWriterFilter
CsrfFilter
LogoutFilter
RequestCacheAwareFilter
SecurityContextHolderAwareRequestFilter
AnonymousAuthenticationFilter
ExceptionTranslationFilter
]
************************************************************
SecurityFilterChain 을 등록하지 않았을 때 사용하는 기본 filter
Security filter chain: [
DisableEncodeUrlFilter
WebAsyncManagerIntegrationFilter
SecurityContextHolderFilter
HeaderWriterFilter
CorsFilter
CsrfFilter
LogoutFilter
UsernamePasswordAuthenticationFilter
DefaultResourcesFilter
DefaultLoginPageGeneratingFilter
DefaultLogoutPageGeneratingFilter
BasicAuthenticationFilter
RequestCacheAwareFilter
SecurityContextHolderAwareRequestFilter
AnonymousAuthenticationFilter
ExceptionTranslationFilter
AuthorizationFilter
]
DisableEncodeUrlFilter
URL 인코딩 방지를 위한 필터 (주로 사용되지 않는다.)WebAsyncManagerIntegrationFilter
비동기 요청을 처리할 때SecurityContext
를 유지하는 필터SecurityContextHolderFilter
SecurityContextHolder
를 초기화 및 정리하는 필터HeaderWriterFilter
보안 관련 HTTP header (X-Frame-Options
,X-Content-Type-Options
등) 를 추가하는 필터CorsFilter
Cross-Origin
요청을 허용하거나 차단하는CORS
정책을 적용하는 필터CsrfFilter
CSRF
(Cross-Site Request Forgery) 공격을 방지하는 필터LogoutFilter
/logout
요청을 감지하고, 세션을 무효화하는 로그아웃 처리 필터UsernamePasswordAuthenticationFilter
폼 기반 로그인 요청을 처리하는 필터 (/login
)DefaultResourcesFilter
정적 리소스 요청을 보안 정책에 맞게 필터링하는 필터DefaultLoginPageGeneratingFilter
기본 로그인 페이지를 자동으로 생성하는 필터DefaultLogoutPageGeneratingFilter
기본 로그아웃 페이지를 자동으로 생성하는 필터BasicAuthenticationFilter
HTTP basic
인증을 처리하는 필터RequestCacheAwareFilter
보안 컨텍스트에서 이전 요청을 캐싱하여, 인증 후 원래 요청으로 리다이렉트하는 필터SecurityContextHolderAwareRequestFilter
HttpServletRequest
를 보안 컨텍스트 인식 요청 객체로 변환하는 필터AnonymousAuthenticationFilter
인증되지 않은 사용자를 자동으로 "익명 사용자" 로 등록하는 필터ExceptionTranslationFilter
인증 및 인가 예외를 처리하고, 적절한 응답을 반환하는 필터AuthorizationFilter
요청에 대한 권한을 확인하고 접근을 허용 또는 차단 하는 필터
SecurityFilterChain 에 사용자 정의 필터 등록
package com.nimkoes.security.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity(debug = true)
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
// 특정 필터 이전에 사용자 정의 필터 추가
http.addFilterBefore(new CustomFilter(), UsernamePasswordAuthenticationFilter.class);
// 특정 필터 위치에 사용자 정의 필터 추가
http.addFilterAt(new CustomFilter(), BasicAuthenticationFilter.class);
// 특정 필터 이후에 사용자 정의 필터 추가
http.addFilterAfter(new CustomFilter(), ExceptionTranslationFilter.class);
return http.build();
}
}
728x90
'시리즈 > Spring Security' 카테고리의 다른 글
GenericFilterBean 과 OncePerRequestFilter (1) | 2025.05.06 |
---|---|
필터 상속과 요청 전파 (1) | 2025.05.05 |
SecurityContextHolder (0) | 2025.05.04 |
SecurityFilterChain 등록 (0) | 2025.05.02 |
Spring Security 동작 원리 개요 (0) | 2025.05.01 |