스프링을 이용해서 개발하는 과정에 Security를 계속 적용해왔다. 처음엔 기본 시큐리티를 적용해보기도 하고, JWT를 적용해서 개발해보기도 하고, 다음 개발에서는 핸들러를 직접 관리하고 추가하는 등을 경험해보면서, 계속 똑같이 새롭게 공부하는 기분이라서 새로운 개인 프로젝트를 진행하는 과정에서, 계속 보면서 기억을 상기하기위해 나만의 정보글이 필요하다고 생각해서 작성하려고 한다.
Spring Security는 강력하고 매우 유연하게 커스터마이징할 수 있는 인증 및 접근 제어 프레임워크입니다. 이는 Spring 기반 애플리케이션을 보호하기 위한 사실상의 표준(de-facto standard)입니다.
Spring Security는 Java 애플리케이션에 인증(Authentication)과 인가(Authorization)를 모두 제공하는 데 중점을 둔 프레임워크입니다. 모든 Spring 프로젝트와 마찬가지로, Spring Security의 진정한 강점은 사용자 요구 사항에 맞게 쉽게 확장할 수 있다는 점에 있습니다.
공식문서 설명을 보면 다음과 같이 설명한다. 중요하다고 생각하는 포인트는 인증, 인가라고 생각한다.
완전 좋은 이미지가 있어서 가져왔습니다. 필터들을 되게 상세하게 설명해준 좋은 자료라서 가져왔습니다. 기본적으로 수행되는 필터들을 정리합니다.
| 순서 | 필터명 | 하는 일 |
|---|---|---|
| 1 | ChannelProcessingFilter | 요청이 HTTPS인지 HTTP인지 강제(리다이렉트 가능) |
| 2 | WebAsyncManagerIntegrationFilter | Spring MVC의 AsyncManager와 연동 |
| 3 | SecurityContextPersistenceFilter | 요청 시작 시 SecurityContext 로드 / 요청 끝날 때 저장 |
| 4 | HeaderWriterFilter | 보안 관련 HTTP 헤더 추가 (ex. CSP, XSS-Protect) |
| 5 | CorsFilter | CORS (Cross-Origin Resource Sharing) 처리 |
| 6 | CsrfFilter | CSRF 토큰 검사 |
| 7 | LogoutFilter | 로그아웃 처리 (로그아웃 URL 호출 시 SecurityContext 비움) |
| 8 | OAuth2AuthorizationRequestRedirectFilter | OAuth2 로그인 요청 시 인가 서버로 리다이렉트 |
| 9 | OAuth2LoginAuthenticationFilter | OAuth2 로그인 성공 후 사용자 인증 처리 |
| 10 | UsernamePasswordAuthenticationFilter | Form 기반 로그인 (아이디/비밀번호) 인증 처리 |
| 11 | ConcurrentSessionFilter | 동시 세션 제어 (ex. 중복 로그인 방지) |
| 12 | BearerTokenAuthenticationFilter | Bearer 토큰 (ex. JWT) 인증 처리 |
| 13 | BasicAuthenticationFilter | HTTP Basic 인증 처리 (Authorization: Basic 헤더) |
| 14 | RequestCacheAwareFilter | 인증 후 원래 요청으로 리다이렉트 지원 |
| 15 | SecurityContextHolderAwareRequestFilter | Request에 isUserInRole, getUserPrincipal 지원 추가 |
| 16 | AnonymousAuthenticationFilter | 인증되지 않은 사용자에게 "익명(Anonymous)" 권한 부여 |
| 17 | SessionManagementFilter | 세션 고정 공격 방어 / 세션 관련 정책 적용 |
| 18 | ExceptionTranslationFilter | 인증/인가 에러 처리 → 적절한 응답(403/401/리다이렉트) 전환 |
| 19 | FilterSecurityInterceptor | 실제 인가(Authorization) 처리: URL 권한 확인 |
이제 이러한 필터들은 모두 다 사용하는 것이 아닌 필터를 비활성화하거나, OAuth2.0을 사용하지 않는 등 필요한 필터만 키게 되면 한 10~15개 정도가 켜집니다. (나중에 개인프로젝트에서 디버그찍어서 사용한 필터 기입예정)
참고
https://spring.io/projects/spring-security
https://javadevjournal.com/spring-security/spring-security-authentication/