(五)Spring Security自定义过滤器

本文介绍了如何在Spring Security中自定义一个图片验证码过滤器。首先,讲解了推荐使用OncePerRequestFilter来实现过滤器,以确保请求只通过过滤器一次。接着,详细阐述了如何创建Spring Security配置类,将自定义的验证码过滤器添加到过滤器链中,并展示了三种添加策略。最后,提到了自定义登录页的设置,并提供了测试验证的步骤。
摘要由CSDN通过智能技术生成

在Spring Security中自定义一个的过滤器,将其添加到Spring Security过滤器链的合适位置。定义一个自己的过滤器类继承Filter接口即可。

但是在 Spring 体系中,推荐使用
OncePerRequestFilter来实现,它可以确保一次请求只会通过一次该过滤器(Filter实际上并不能保证这
一点)。

public class MySecurityFilter extends OncePerRequestFilter {
   
    @Override
    protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
   
        // 非登录请求,不处理
        if("/login".equals(httpServletRequest.getRequestURI())&&httpServletRequest.getMethod().equals(HttpMethod.POST.name())) {
   
            String username = httpServletRequest.getParameter("username");
            String password = httpServletRequest.getParameter("password");
            System.out.println("username:" + username);
            System.out.println("password:" + password);
        }else {
   
            System.out.println("非登录处理!");
        }
        filterChain.doFilter(httpServletRequest,httpServletResponse);
    }
}

创建Spring Security 配置类,继承WebSecurityConfigurerAdapter,重写方法void configure(HttpSecurity http),将自定义的过滤器添加到Spring Security 过滤器链中:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
   

    @Override
    protected void configure(HttpSecurity http) throws Exception {
   
        super.configure(http);
        // 将自定义的过滤器添加到Spring Security 过滤器链中
        http.addFilterBefore(new MySecurityFilter(),UsernamePasswordAuthenticationFilter.class);
    }

}

将该过滤器添加到Spring Security的过滤器链中即可生效,Spring Security支持三种filter添加策略:

public final class HttpSecurity extends AbstractConfiguredSecurityBuilder<DefaultSecurityFilterChain, HttpSecurity> implements SecurityBuilder<DefaultSecurityFilterChain>, HttpSecurityBuilder<HttpSecurity> {
   
 ......
  
     // 将自定义的过滤器添加在指定过滤器之后
    public HttpSecurity addFilterAfter(Filter filter, Class<? extends Filter> afterFilter) {
   
        this.comparator.registerAfter(filter.getClass(), afterFilter);
        return this.addFilter(filter);
    }
    // 将自定义的过滤器添加在指定过滤器之前
    <
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值