# Spring Security란?
Spring Security는 Java 기반의 응용 프로그램에서 보안을 구현하기 위한 강력하고 널리 사용되는 프레임워크입니다. 인증, 권한 부여, 세션 관리 및 일반적인 보안 위협으로부터의 보호 등 다양한 보안 관련 문제를 해결하기 위한 기능을 제공합니다.
결론은 개발자가 좀 더 간편하게 보안을 구현할 수 있도록 도와주는 프레임워크입니다.
# 구조
아주 간단하게 말해서 등록된 수많은 filter들을 통과한 요청을 안전한 요청으로 처리하는 식입니다.
- DelegatingFilterProxy
보통 서블릿 필터는 web.xml 파일에 직접 등록되어 사용됩니다. 반면, spring에서는 web.xml보다 JavaConfig 설정 파일을 사용합니다. delegatingFilterProxy는 서블릿 필터를 spring bean으로 사용할 수 있도록 하고 IoC 컨테이너가 필터를 관리하도록 하여 이 차이를 해결해줍니다. - FilterChainProxy
일반적으로 FilterChainProxy는 DelegatingFilterProxy로 래핑됩니다. DelegatingFilterProxy는 web.xml 파일에 등록되어 서블릿 필터로써 동작하면서, 내부적으로 FilterChainProxy를 호출하여 Spring Security의 보안 필터 체인을 관리합니다. 이를 통해 서블릿 컨테이너와 Spring Security를 통합할 수 있고, 필터 체인의 관리와 Spring의 기능을 함께 활용할 수 있습니다. - SecurityFilterChain
filter들의 순서는 중요합니다. 일반적으로 사용되는 필터순서는 다음과 같습니다.
ChannelProcessingFilter
WebAsyncManagerIntegrationFilter
SecurityContextPersistenceFilter
HeaderWriterFilter
CorsFilter
CsrfFilter
LogoutFilter
OAuth2AuthorizationRequestRedirectFilter
Saml2WebSsoAuthenticationRequestFilter
X509AuthenticationFilter
AbstractPreAuthenticatedProcessingFilter
CasAuthenticationFilter
OAuth2LoginAuthenticationFilter
Saml2WebSsoAuthenticationFilter
UsernamePasswordAuthenticationFilter
OpenIDAuthenticationFilter
DefaultLoginPageGeneratingFilter
DefaultLogoutPageGeneratingFilter
ConcurrentSessionFilter
DigestAuthenticationFilter
BearerTokenAuthenticationFilter
BasicAuthenticationFilter
RequestCacheAwareFilter
SecurityContextHolderAwareRequestFilter
JaasApiIntegrationFilter
RememberMeAuthenticationFilter
AnonymousAuthenticationFilter
OAuth2AuthorizationCodeGrantFilter
SessionManagementFilter
ExceptionTranslationFilter
FilterSecurityInterceptor
SwitchUserFilter - Handling Security Exceptions
사용자가 인증되지 않았거나 AuthenticationException이 발생한 경우, 인증 프로세스를 시작합니다.- SecurityContextHolder는 초기화됩니다.
- HttpServletRequest는 RequestCache에 저장됩니다. 사용자가 성공적으로 인증을 마치면, RequestCache를 사용하여 원래의 요청을 재생할 수 있습니다.
- AuthenticationEntryPoint는 클라이언트로부터 자격 증명을 요청합니다. 예를 들어, 로그인 페이지로 리디렉션하거나 WWW-Authenticate 헤더를 전송할 수 있습니다.
- 그렇지 않으면, AccessDeniedException이 발생한 경우, 접근이 거부되었습니다. AccessDeniedHandler가 호출되어 접근 거부를 처리합니다.
# Reference
chatgpt
'Back-end > Spring-login project' 카테고리의 다른 글
OAuth 2.0의 원리와 동작 (0) | 2023.06.16 |
---|---|
Spring Security 인증 과정 (Authentication 부분) (0) | 2023.06.13 |
고민의 흔적 (~ing) (0) | 2023.04.22 |
요구사항과 설계 (0) | 2023.03.21 |