spring security

自定义Security认证流程

ref-nobody 创建时间 2025年7月30日 | 本文最后更新于 2025年8月16日 No Comments

在spring-security中,针对于用户名和密码的登录认证已经提供了UsernamePasswordAuthenticationFilter过滤器,而如果我们想使用手机号验证码的认证方式则需要自定义认证过滤逻辑。 自定义认证过滤器可以通过继承OncePerRequestFilter或者AbstractAuthenticationProcessingFilter来实现,这两种方式是有区别的。 OncePerRequestFilter与AbstractAuthenticationProcessingFilter 自定义过滤器filter,可以继承自OncePerRequestFilter或者是AbstractAuthenticationProcessingFilter来实现自己的过滤器。这两个类是有区别的,首先看这两个类的全路径:1. org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter2. org.springframework.web.filter.OncePerRequestFilter可以看到OncePerRequestFilter是在Spring-web包下面,而AbstractAuthenticationProcessingFilter是在spring-security-web包下面。 核心差异 我们在使用security的时候,会通过permitAll()配置一些不需要进行认证的请求,例如登录的请求不需要进行权限认证,会使用HttpSecurity来进行配置: 需要注意的是这些配置不会影响继承于OncePerRequestFilter类的过滤器,因为OncePerRequestFilter过滤器不是spring security体系下的。如果需要跳过某个请求uri,则需要自己进行实现;我们也可以重写OncePerRequestFilter中的shouldNotFilter方法即可,这是OncePerRequestFilter类中已经预置好的方法,可以让某些请求不执行当前filter的逻辑。

Read More