一、核心拦截器详细说明

  1.WebAsyncManagerIntegrationFilter 

    根据请求封装获取WebAsyncManager
    从WebAsyncManager获取/注册SecurityContextCallableProcessingInterceptor

  2.SecurityContextPersistenceFilter  

    先实例SecurityContextHolder->HttpSessionSecurityContextRepository(下面以repo代替)
    作用:其会从Session中取出已认证用户的信息,提高效率,避免每一次请求都要查询用户认证信息
    根据请求和响应构建HttpRequestResponseHolde
    repo根据HttpRequestResponseHolder加载context获取SecurityContext
    SecurityContextHolder将获得到的SecurityContext设置到Context中,然后继续向下执行其他过滤器
    finally-> SecurityContextHolder获取SecurityContext,然后清除,
    并将其和请求信息保存到repo,从请求中移除FILTER_APPLIED属性

  3.HeaderWriterFilter
    往该请求的Header中添加相应的信息,在http标签内部使用security:headers来控制

 4.CsrfFilter
    csrf又称跨域请求伪造,攻击方通过伪造用户请求访问受信任站点。
    对需要验证的请求验证是否包含csrf的token信息,如果不包含,则报错。
    这样攻击网站无法获取到token信息,则跨域提交的信息都无法通过过滤器的校验。

 5.LogoutFilter
    匹配URL,默认为/logout
    匹配成功后则用户退出,清除认证信息

 6.RequestCacheAwareFilter
    通过HttpSessionRequestCache内部维护了一个RequestCache,用于缓存HttpServletRequest

 7.SecurityContextHolderAwareRequestFilter
    针对ServletRequest进行了一次包装,使得request具有更加丰富的API

 8.AnonymousAuthenticationFilter
    当SecurityContextHolder中认证信息为空,则会创建一个匿名用户存入到SecurityContextHolder中。

 9.SessionManagementFilter
    securityContextRepository限制同一用户开启多个会话的数量
    SessionAuthenticationStrategy防止session-fixation protection attack(保护非匿名用户)

 10.ExceptionTranslationFilter
    ExceptionTranslationFilter异常转换过滤器位于整个springSecurityFilterChain的后方,
    用来转换整个链路中出现的异常
    此过滤器的作用是处理中FilterSecurityInterceptor抛出的异常,然后将请求重定向到对应页面,
    或返回对应的响应错误代码
  
 11.FilterSecurityInterceptor
    获取到所配置资源访问的授权信息
    根据SecurityContextHolder中存储的用户信息来决定其是否有权限
    主要一些实现功能在其父类AbstractSecurityInterceptor中

 12.UsernamePasswordAuthenticationFilter
    表单认证是最常用的一个认证方式,一个最直观的业务场景便是允许用户在表单中输入用户名和密码进行登录,
    而这背后的UsernamePasswordAuthenticationFilter,在整个Spring Security的认证体系中则扮演着至关重要的角色

二、框架的核心组件

  SecurityContextHolder:提供对SecurityContext的访问

  SecurityContext:持有Authentication对象和其他可能需要的信息

  AuthenticationManager :其中可以包含多个AuthenticationProvider; ProviderManager对象为AuthenticationManager接口的实现类

  AuthenticationProvider:主要用来进行认证操作的类 调用其中的authenticate()方法去进行认证操作

  Authentication:Spring Security方式的认证主体

  GrantedAuthority:对认证主题的应用层面的授权,含当前用户的权限信息,通常使用角色表示

  UserDetails:构建Authentication对象必须的信息,可以自定义,可能需要访问DB得到

  UserDetailsService:通过username构建UserDetails对象,通过loadUserByUsername根据userName获取UserDetail对象

Spring Security 学习记录的更多相关文章

  1. [转]Spring Security学习总结一

    [总结-含源码]Spring Security学习总结一(补命名空间配置) Posted on 2008-08-20 10:25 tangtb 阅读(43111) 评论(27)  编辑  收藏 所属分 ...

  2. Spring security 学习 (自助者,天助之!)

    自己努力,何必要强颜欢笑的求助别人呢?  手心向下不求人! Spring security学习有进展哦: 哈哈! 1.页面都是动态生产的吧! 2.设置权限:  a:pom.xml配置jar包 b:cr ...

  3. SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能

    在 Spring Security 中基于表单的认证模式,默认就是密码帐号登录认证,那么对于短信验证码+登录的方式,Spring Security 没有现成的接口可以使用,所以需要自己的封装一个类似的 ...

  4. SpringBoot + Spring Security 学习笔记(三)实现图片验证码认证

    整体实现逻辑 前端在登录页面时,自动从后台获取最新的验证码图片 服务器接收获取生成验证码请求,生成验证码和对应的图片,图片响应回前端,验证码保存一份到服务器的 session 中 前端用户登录时携带当 ...

  5. Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客

    ==他的博客应该不错,没有细看 Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客 http://blog.csdn.net/u012706811/article/det ...

  6. [转]Spring Security学习总结二

    原文链接: http://www.blogjava.net/redhatlinux/archive/2008/08/20/223148.html http://www.blogjava.net/red ...

  7. 我的Spring Boot学习记录(二):Tomcat Server以及Spring MVC的上下文问题

    Spring Boot版本: 2.0.0.RELEASE 这里需要引入依赖 spring-boot-starter-web 这里有可能有个人的误解,请抱着怀疑态度看. 建议: 感觉自己也会被绕晕,所以 ...

  8. spring security 学习资料

    spring security 学习资料 网址 Spring Security 文档参考手册中文版 https://springcloud.cc/spring-security.html

  9. spring security实现记录用户登录时间等信息

    目录 spring security实现记录用户登录时间等信息 一.原理分析 二.实现方式 2.1 自定义AuthenticationSuccessHandler实现类 2.2 在spring-sec ...

随机推荐

  1. CSS3 01. CSS3现状、属性选择器、伪类选择器、结构伪类、伪元素选择器、颜色、文本阴影shadow、盒子模型、私有化前缀

    CSS 3 现状 兼容性差,需添加私有前缀/移动端优于PC端/不断改进中/渐进增强原则/考虑用户群体/遵照产品的方案 : CSS3手册 需要阅读其--阅读及使用指引 []表示全部的可选项 || 或者 ...

  2. Docker版本与centos和ubuntu环境下docker安装介绍

    # Docker版本与安装介绍 * Docker-CE 和 Docker-EE * Centos 上安装 Docker-CE * Ubuntu 上安装 Docker-CE ## Docker-CE和D ...

  3. Redis缓存穿透、缓存雪崩、并发问题分析与解决方案

    (一)缓存和数据库间数据一致性问题 分布式环境下(单机就不用说了)非常容易出现缓存和数据库间的数据一致性问题,针对这一点的话,只能说,如果你的项目对缓存的要求是强一致性的,那么请不要使用缓存.我们只能 ...

  4. FreeSql (五)插入数据

    var connstr = "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;" + "Initia ...

  5. Winform中实现ZedGraph中曲线右键显示为中文

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  6. hive学习笔记之-数据类型

    数据类型 Hive基本的数据类型: Hive集合数据类型: 另外还有一个复合数据类型,可以综合上面的数据类型组合到一起. ·          union: UNIONTYPE<data_typ ...

  7. C# HTTP网络常用方法封装

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Regi ...

  8. [PySpark] 01 - Preview parquet files in S3 ×××

    本系列基于实际测试数据,质量保证,不自欺欺人. 实践是检验真理的唯一标准. Swipejobs is all about matching Jobs to Workers. Your challeng ...

  9. 按插入顺序排序的map

    LinkedHashMap HashMap是无序的,HashMap在put的时候是根据key的hashcode进行hash然后放入对应的地方.所以在按照一定顺序put进HashMap中,然后遍历出Ha ...

  10. python最基本的数据掌握

    python初学者可能会对list数据类型和int或者是字符串数据类型比较迷茫  list是引用,是指向的一个内存地址, 变量不是引用的 啥也不说上解释: a = 1 b = a a = 2 prin ...