1. 개요
이 빠른 사용방법(예제)에서는 Spring Security 필터 체인에 대한 사용자 정의 필터 작성에 중점을 둘 것입니다.
2. 필터 만들기
Spring Security는 기본적으로 많은 필터를 제공하며 대부분의 경우 충분합니다.
그러나 물론 체인에서 사용할 새 필터를 만들어 새 기능을 구현해야 하는 경우도 있습니다.
org.springframework.web.filter.GenericFilterBean 을 구현하는 것으로 시작하겠습니다 .
GenericFilterBean 은 Spring을 인식 하는 간단한 javax.servlet.Filter 구현입니다.
단일 메서드만 구현하면 됩니다.
public class CustomFilter extends GenericFilterBean {
@Override
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {
chain.doFilter(request, response);
}
}
3. Security 구성에서 필터 사용
필터를 Spring Security 구성에 연결하기 위해 XML 구성 또는 Java 구성을 자유롭게 선택할 수 있습니다.
3.1. 자바 구성
SecurityFilterChain 빈 을 생성하여 프로그래밍 방식으로 필터를 등록할 수 있습니다 .
예를 들어 HttpSecurity 인스턴스 에서 addFilterAfter 메서드 와 함께 작동합니다.
@Configuration
public class CustomWebSecurityConfigurerAdapter {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.addFilterAfter(
new CustomFilter(), BasicAuthenticationFilter.class);
return http.build();
}
}
몇 가지 가능한 방법이 있습니다.
- addFilterBefore(filter, class) 는 지정된 필터 클래스 의 위치 앞에 필터 를 추가합니다 .
- addFilterAfter(filter, class) 는지정된 필터 클래스 의 위치 뒤에 필터 를 추가합니다 .
- addFilterAt(filter, class) 는 지정된 필터 클래스의 위치에 필터 를 추가합니다
- addFilter(filter) 는 Spring Security에서 제공하는 필터 중 하나의 인스턴스이거나 확장해야 하는 필터 를 추가합니다
3.2. XML 구성
필터 의 위치를 지정하기 위해 custom-filter 태그와 이러한 이름 중 하나를 사용하여 체인에 필터를 추가할 수 있습니다 .
예를 들어 after 속성으로 지정할 수 있습니다.
<http>
<custom-filter after="BASIC_AUTH_FILTER" ref="myFilter" />
</http>
<beans:bean id="myFilter" class="com.baeldung.security.filter.CustomFilter"/>
다음은 스택에서 필터를 배치할 정확한 위치를 지정하는 모든 속성입니다.
- after 는 사용자 지정 필터가 체인에 배치되는 직후에 필터를 설명합니다.
- before 는 체인에서 필터를 배치해야 하는 필터를 정의합니다.
- position 을 사용하면 명시적 위치의 표준 필터를 사용자 지정 필터로 바꿀 수 있습니다.
4. 결론
이 빠른 기사에서는 커스텀 필터를 생성하고 이를 Spring Security 필터 체인에 연결했습니다.
언제나처럼 모든 코드 예제는 샘플 GitHub 프로젝트 에서 사용할 수 있습니다 .