首页 > 其他分享 >SpringSecurity的认证实现分析

SpringSecurity的认证实现分析

时间:2024-03-22 22:55:43浏览次数:33  
标签:分析 web springframework 认证 Filter org security SpringSecurity

实现机制

概括来讲,是将认证信息放在Session中,当客户端发起访问时检查Session中是否存在认证信息,以及认证信息中的权限是否满足预期。
更具体地说,是通过Filter来拦截客户端请求并进行判断处理,使用的Filter链如下:

[
org.springframework.security.web.context.SecurityContextPersistenceFilter, 
org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter, 
org.springframework.security.web.header.HeaderWriterFilter, 
org.springframework.security.web.authentication.logout.LogoutFilter, 
org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter, 
org.springframework.security.web.authentication.www.BasicAuthenticationFilter, 
org.springframework.security.web.savedrequest.RequestCacheAwareFilter, 
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter, 
org.springframework.security.web.authentication.AnonymousAuthenticationFilter, 
org.springframework.security.web.session.SessionManagementFilter, 
org.springframework.security.web.access.ExceptionTranslationFilter, 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor
]

值得注意的是:这些Filter都是Spring Security框架中定义的,它们会被加载到Spring容器中,最终会被包装到FilterChainProxy$.VirtualFilterChainadditionalFilters属性中。

那么这些Filter是如何生效的呢?

与普通的Sevlet Filter不同,这些Filter不需要在web.xml中明确配置,但是需要在web.xml中配置org.springframework.web.filter.DelegatingFilterProxy作为进入Spring Security框架的入口。

<!-- 集成Spring Security框架 -->
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

DelegatingFilterProxy的执行路径如下:
org.springframework.web.filter.DelegatingFilterProxy.doFilter()
->org.springframework.security.web.FilterChainProxy.doFilter() -> doFilterInternal()
->org.springframework.security.web.FilterChainProxy$.VirtualFilterChain.doFilter()

最后是在org.springframework.security.web.FilterChainProxy$.VirtualFilterChain.doFilter()方法中依次取出additionalFilters属性中的Filter对象执行拦截操作。

认证流程

如上所述,Spring Security的认证实现都是通过Filter拦截来实现的,最终是在org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication()方法中实现的。
具体的执行流程图如下:
SpringSecurity登录认证流程

默认情况下,Spring Security处理登录认证的URI地址为/login,且只支持POST方法,这可以从UsernamePasswordAuthenticationFilter的构造函数中得到确认。

public UsernamePasswordAuthenticationFilter() {
    super(new AntPathRequestMatcher("/login", "POST"));
}

也就是说在<security:form-login>中指定的login-processing-url属性实际上必须是/login,同时也必须把自定义登录页面表单中的action属性也设置为login

当然,Spring Security处理登录认证的URI地址是可以修改的,如下所示在<security:form-login>中修改:

<!--授权自定义登录页-->
<security:form-login login-processing-url="/lg">

特别注意:如果修改了默认认证地址URI,则必须同步修改自定义登录页面表单中的action属性值。

【参考】
java笔记----springMvc简单整合spring-security示例

标签:分析,web,springframework,认证,Filter,org,security,SpringSecurity
From: https://www.cnblogs.com/nuccch/p/18090560

相关文章

  • 时序分析:基础知识整理(三)差分转单端的约束等
    之后的都只有我个人能看,想看的请支持单刀大佬。主时钟约束主时钟约束,就是我们对主时钟(PrimaryClock)的时钟周期进行约束(告诉综合工具布局布线的标准),这个约束是我们用的最多的约束了,也是最重要的约束。主时钟必须与一个网表对象相连,该对象代表了所有时钟边沿的开始点,并且在时钟......
  • 深入了解与全面解析华为认证(HCIA/HCIP/HCIE)
    一、网络行业技术认证网络行业对于技术评定一般分为两种,一种是企业认证,一种是国家认证企业认证属于技术认证,在国内的互联网企业都会承认,用于评定一个人的技术等级或者企业招投标的资质。网络行业认证最好的有三种,又分别有三种不同等级及多种方向,分别为:华为、思科、H3C(华三......
  • 深入了解与全面解析华为认证(HCIA/HCIP/HCIE)
    一、网络行业技术认证网络行业对于技术评定一般分为两种,一种是企业认证,一种是国家认证企业认证属于技术认证,在国内的互联网企业都会承认,用于评定一个人的技术等级或者企业招投标的资质。网络行业认证最好的有三种,又分别有三种不同等级及多种方向,分别为:华为、思科、H3C(华三......
  • CCF软件能力认证202312-1——仓库规划
    问题描述西西艾弗岛上共有个仓库,依次编号为。每个仓库均有一个维向量的位置编码,用来表示仓库间的物流运转关系。具体来说,每个仓库均可能有一个上级仓库,满足:仓库位置编码的每一维均大于仓库位置编码的对应元素。比如编码为的仓库可以成为的上级,但不能成为的上级。如......
  • R语言数据质量分析
    R语言数据质量分析数据质量分析是数据预处理的前提,也是数据分析结论有效性和准确性的基础。数据质量分析的主要任务是检查原始数据中是否存在脏数据。脏数据一般包括;缺失值分析缺失值产生的原因、影响原因:部分信息难以获取,或获取的代价太大因人为因素遗漏的、忘记......
  • 时序分析:基础知识整理(二)
    搬运自:孤独的单刀;大佬后面的是付费项目,所以涉及付费项目的我不会公开,本博客纯方便自己看做笔记。输出延时时间Tco由clk触发到输出数据有效之间最大延迟时间,对应图1的Tco(clockoutputdelay)组合逻辑与时序逻辑组合逻辑电路数字电路根据逻辑功能的不同特点,可以分成两......
  • 数值分析复习:最佳逼近、最佳一致逼近
    文章目录最佳逼近1.度量空间中的逼近2.赋范线性空间中的逼近3.连续函数空间上的最佳逼近3.1多项式逼近3.2存在性和唯一性3.3最小零偏差多项式本篇文章适合个人复习翻阅,不建议新手入门使用最佳逼近1.度量空间中的逼近给定度量空间......
  • 数值分析复习:样条插值
    文章目录样条插值1.样条函数1.1泛函极小解和三次样条函数1.2S(x......
  • AI智能分析网关V4在非煤矿山安全生产视频智能监管场景中的应用
    近年来,全国非煤矿山((含金属非金属矿山、尾矿库,以及矿泉水等其他矿山)安全生产工作取得明显成效,但安全基础仍然薄弱,事故总量仍然较大,重特大事故尚未得到根本遏制,安全生产形势依然严峻复杂。伴随着视频技术、云计算、大数据、物联网技术、人工智能技术等新兴技术的快速发展和应用,非煤......
  • 时序分析:基础知识整理(一)
    好的时序是设计出来的,不是约束出来的。搬运自:孤独的单刀;大佬后面的是付费项目,所以涉及付费项目的我不会公开,本博客纯方便自己看做笔记。时钟抖动ClockJitter理想的时钟信号是完美的方波,但是实际的方波是存在一些时钟抖动的。那么什么是时钟抖动呢? 时钟抖动,ClockJitt......