Spring Security过滤器链中的自定义过滤器

2023/05/17

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. 在安全配置中使用过滤器

我们可以自由选择XML配置或Java配置来将过滤器注入到Spring Security配置中。

3.1 Java配置

我们可以通过创建SecurityFilterChain bean以编程方式注册过滤器。

例如,它与HttpSecurity实例上的addFilterAfter方法一起使用:

@Configuration
public class CustomWebSecurityConfigurerAdapter {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.addFilterAfter(new CustomFilter(), BasicAuthenticationFilter.class);
        return http.build();
    }
}

还有几种可能的方法:

3.2 XML配置

我们可以使用custom-filter标签和这些名称之一将过滤器添加到链中,以指定过滤器的位置。

例如,可以通过after属性指出:

<http>
    <custom-filter after="BASIC_AUTH_FILTER" ref="myFilter" />
</http>

<beans:bean id="myFilter" class="cn.tuyucheng.taketoday.security.filter.CustomFilter"/>

以下是指定过滤器在堆栈中的确切位置的所有属性:

  • after描述了过滤器,在该过滤器之后,自定义过滤器将被放置在链中。
  • before定义了过滤器,我们的过滤器应该放在链中。
  • position允许用自定义过滤器替换显式位置的标准过滤器。

4. 总结

在这篇快速文章中,我们创建了一个自定义过滤器并将其注入到Spring Security过滤器链中。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章