2025. 12. 16. 09:52ㆍSpring Security
🛠️ HttpSecurity
HttpSecurity는 Spring Security에서 SecurityFilterChain을 생성하고 구성하는 데 사용되는 핵심 빌더(Builder) 객체입니다. 이는 개발자가 선언적인 방식으로 복잡한 웹 보안 규칙을 쉽게 정의할 수 있도록 해주는 DSL(Domain Specific Language, 도메인 특화 언어) 역할을 합니다.
개발자는 HttpSecurity 객체에 메서드 체이닝 방식으로 원하는 보안 설정을 적용하고, 최종적으로 .build()를 호출하여 SecurityFilterChain 인스턴스를 생성하게 됩니다.
1. HttpSecurity의 핵심 역할: 빌더 패턴
HttpSecurity는 빌더 패턴을 구현하고 있습니다. 이 객체를 사용하여 SecurityFilterChain에 포함될 모든 보안 필터들과 그 동작 방식을 설정합니다.
- 설정 시작:
@Bean메서드의 아규먼트로HttpSecurity http객체를 주입받아 설정합니다. - 설정 체이닝:
http.로 시작하는 메서드를 호출하여 인증, 인가, 세션 관리 등 다양한 설정을 정의합니다. 대부분의 메서드는 설정을 위한 객체를 반환하거나 다시HttpSecurity객체를 반환하여 연속적인 체이닝을 가능하게 합니다. - 필터 체인 생성: 설정이 완료되면
.build()를 호출하여 설정된 모든 규칙을 담은 최종 결과물인SecurityFilterChain을 생성하여 반환합니다.
2. HttpSecurity를 통해 구성되는 주요 영역
HttpSecurity는 웹 요청에 대한 보안을 전반적으로 제어하는 데 사용되며, 크게 다음과 같은 영역의 설정을 담당합니다.
| 설정 영역 | 주요 메서드 (예시) | 설명 |
|---|---|---|
| Authorization | .authorizeHttpRequests() |
특정 URL Path에 대한 접근 권한(permitAll(), hasRole(), authenticated() 등)을 정의합니다. 가장 중요하고 자주 사용됩니다. |
| Authentication | .formLogin() |
폼 기반 로그인(Username/Password)의 동작(로그인 페이지, 성공/실패 URL)을 설정합니다. |
.httpBasic() |
HTTP Basic 인증을 활성화합니다. | |
.oauth2Login() |
OAuth 2.0 기반 소셜 로그인을 설정합니다. | |
| 예외 처리 | .exceptionHandling() |
인증/인가 실패 시의 동작(accessDeniedHandler(), authenticationEntryPoint())을 정의합니다. |
| 세션 관리 | .sessionManagement() |
세션 생성 정책(STATELESS, IF_REQUIRED), 동시 세션 제어 등을 설정합니다. |
| 보안 기능 | .csrf() |
CSRF(Cross-Site Request Forgery) 방어를 활성화/비활성화합니다. |
.headers() |
HTTP 보안 헤더(XSS, Content-Security-Policy 등)를 설정합니다. | |
| 필터 관리 | .addFilter() / .addFilterBefore() |
개발자가 만든 커스텀 필터(예: JWT 인증 필터)를 기존 필터 체인의 특정 위치에 삽입합니다. |
3. 멀티 SecurityFilterChain 구성에서의 역할
HttpSecurity는 FilterChainProxy가 요청을 분류할 수 있도록 각 체인의 적용 범위를 지정하는 데도 사용됩니다.
.securityMatcher(String... patterns): 해당SecurityFilterChain이 적용될 URL 패턴을 명시적으로 정의합니다. 이 설정을 통해 요청 경로에 따라 완전히 다른 보안 정책을 가진 여러 개의SecurityFilterChain을 생성할 수 있습니다.- 예시: /api/** 경로에만 적용되는 SecurityFilterChain을 만듭니다.
http.securityMatcher("/api/**")
.csrf(csrf -> csrf.disable());
// ...
4. HttpSecurity와 Spring 컨테이너의 관계 (다시 한번 강조)
HttpSecurity 객체는 개발자가 직접 new 키워드로 생성하거나, 컨테이너에 빈으로 등록하는 객체가 아닙니다.
- 주입 방식: Spring Security의 내부 구성 인프라(주로
WebSecurityConfiguration)가SecurityFilterChain빈을 생성하는 메서드(@Bean public SecurityFilterChain filterChain(HttpSecurity http))를 감지하고, 해당 메서드가 호출될 때 요청에 맞는HttpSecurity인스턴스를 새로 만들거나 준비하여 아규먼트로 주입(전달)해 줍니다. - 휘발성:
HttpSecurity는 설정을 정의하는 동안만 사용되는 임시적인 빌더이며,.build()를 호출한 후에는 수명이 다하고, 최종 결과물인SecurityFilterChain만이 컨테이너에 빈으로 등록됩니다.
HttpSecurity를 사용하면 복잡한 필터 체인 구성 작업을 추상화하여, 개발자가 '어떻게' 보안을 구현할지 대신 '무엇을' 보호할지에 집중할 수 있게 됩니다.
'Spring Security' 카테고리의 다른 글
| JWT 필터 삽입 위치 및 UsernamePasswordAuthenticationFilter의 존속 여부 설명 (0) | 2025.12.17 |
|---|---|
| JWT 기반 인증 시스템에서 UsernamePasswordAuthenticationFilter와 커스텀 JwtAuthenticationFilter (0) | 2025.12.17 |
| SecurityFilterChain (0) | 2025.12.16 |
| @EnableWebSecurity 어노테이션 (0) | 2025.12.16 |
| ch15 Implementing an OAuth 2 resource server (0) | 2024.12.17 |