一、核心拦截器详细说明

  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. 【Swagger】可能是目前最好的 Spring Boot 集成 swagger 的方案

    [Swagger]可能是目前最好的Spring Boot集成 swagger 的方案 ![](https://img2018.cnblogs.com/blog/746311/201909/746311 ...

  2. 跟我学SpringCloud | 第十七篇:服务网关Zuul基于Apollo动态路由

    目录 SpringCloud系列教程 | 第十七篇:服务网关Zuul基于Apollo动态路由 Apollo概述 Apollo相比于Spring Cloud Config优势 工程实战 示例代码 Spr ...

  3. 了解css中px、em、rem的区别并使用Flexible实现vue移动端的适配

    本人java菜鸟一名,若有错误,还请见谅. 1.px和em和rem的定义和区别 px:px像素,是相对单位,相对于屏幕的分辨率而言,也就是说,当屏幕的分辨率不同那么px相同,实际看到的大小也会不同. ...

  4. 数据库常用SQL语句(三):子查询

    一.为什么会使用子查询 虽然可以通过连接查询来实现多表查询数据记录,但不建议使用,因为连接查询的性能很差,为什么呢?我们来进行分析,例如 我们要查询部门表t_dept 和雇员表t_employee中的 ...

  5. Python学习之String

    Strings可以想象成一个有序列的数组 #Indexing planet = 'Pluto' planet[0] 'P' #Slicing planet[-3:] 'uto' #How long l ...

  6. NLP(十七)利用tensorflow-serving部署kashgari模型

      在文章NLP(十五)让模型来告诉你文本中的时间中,我们已经学会了如何利用kashgari模块来完成序列标注模型的训练与预测,在本文中,我们将会了解如何tensorflow-serving来部署模型 ...

  7. 在nginx日志access log可以记录POST请求的参数值

    1)      在nginx日志access log可以记录POST请求的参数值 实现程度:日志中可以显示POST请求所提交的参数值 问题: 日志中文显示十六进制(在配置文件中配置中文也无效) 没有对 ...

  8. JAVA测试(选择题)

    1.分析如下所示的Java代码,其中this关键字的意思是(  ) Public class Test { Private String name; Public String getName(){ ...

  9. JAVA集合框架包含的内容

    Java集合框架提供了一套性能优良.使用方便的接口和类,他们位于java.util包中. Collection接口 主要有List.Set等实现类,Map接口主要有HashMap.TreeMap等实现 ...

  10. 64位linux编译32位程序

    昨天接到的任务,编译64位和32位两个版本的.so动态库给其他部门,我的ubuntu虚拟机是64位的,编译32位时遇到了问题: /usr/bin/ld: cannot find -lstdc++ 最后 ...