728x90
스프링 필터 아키텍처
- 필터는 무엇인가
- 스프링 필터의 이해
- 스프링 시큐리티의 이해
필터는 무엇인가
필터는 클라이언트의 요청을 수행하기 전 공통으로 거치는 검사이다.
클라이언트가 응용프로그램에 요청을 보내면, 톰캣 서블릿 컨테이너에서 요청을 받는다.
요청은 서블릿 컨테이너의 필터를 거치고 서블릿을 통해 요청이 수행된다.

스프링 필터의 이해
스프링은 기존 필터에 위임 필터 프록시를통해 커스텀 필터를 적용할 수 있다.
오른쪽 이미지와 같이 필터를 Bean으로 등록하면 필터를 등록할 수 있다.


스프링 시큐리티의 이해
스프링에서는 위임 필터 프록시(Delegating Filter Proxy)를 통해 필터를 추가할 수 있다.
스프링 시큐리티는 위임 필터 프록시에서 시큐리티 필터 체인을 통해 인증을 할 수 있도록한다.


스프링 시큐리티 필터체인 적용
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf(AbstractHttpConfigurer::disable)
.cors(cors-> cors.configurationSource(corsConfigurationSource()))
.authorizeHttpRequests(req ->
req.requestMatchers(WHITE_LIST_URL)
.permitAll()
.anyRequest().hasRole("USER")
)
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authenticationProvider(authenticationProvider)
.addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class)
.logout(logout ->
logout.logoutUrl("/api/v1/auth/logout")
.addLogoutHandler(logoutHandler)
.logoutSuccessHandler((request, response, authentication) -> SecurityContextHolder.clearContext())
)
;
return http.build();
}
해당 체인의 구성에서 설정은 다음과 같다.
CSRF : 해당 프로젝트는 REST API용 이기떄문에 CSRF 설정을 굳이 하지 않았다.
CORS(Cross-Origin-Resource-Sharing) : 설정은 별도 설정으로 빼두었다.
AuthorizeHttpRequests : WHITE_LIST_URL에 담긴 주소는 별도 권한 검사없이 허용하도록 설정해두고, 나머지 권한에 대해서는 USER권한이 있는지 체크하도록 설정했다.
728x90
반응형
'공부 > Spring' 카테고리의 다른 글
[QueryDSL] QueuryDSL vs JPQL (0) | 2023.12.18 |
---|---|
[스프링] AuditorAware (1) | 2023.11.22 |
[Spring] ControllerAdvice (0) | 2022.09.27 |
BeanFatory와 ApplicationContext (0) | 2022.03.06 |
스프링 IoC , DI (0) | 2022.03.03 |