一、核心拦截器详细说明

  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. Android 开发系列教程之(一)Android基础知识

    什么是Android Android一词最早是出现在法国作家维里耶德利尔·亚当1986年发表的<未来夏娃>这部科幻小说中,作者利尔·亚当将外表像人类的机器起名为Android,这就是And ...

  2. Can't connect to MySQL server on 'localhost' (10038)

    平台:win7 已经安装好数据库,但是 在连接MySQL数据库时发生问题: 经过一系列的资料查找后,得到结论MySQL没有启动 解决方法: 将MySQL加入到Windows的服务中.切换到MySQL安 ...

  3. App引流增长技术:Deeplink(深度链接)技术

    移动互联网时代,信息的分享传播无疑是 App 引流增长的关键,与其花费大量精力和成本找渠道.硬推广,不如从细节下手,用最快最简便的方法实现 Deeplink(深度链接)技术,打破信息孤岛.缩短分享路径 ...

  4. EF指定更新字段

    使用EF做更新时,若没有进行跟踪会默认全字段更新,那怎么做到只更新我们想要更新的字段呢? /// <summary> /// 修改指定属性的单条数据 /// </summary> ...

  5. Linux 修改 ls 时间显示格式

    [root@CentosTe tmp]# export TIME_STYLE='+%Y-%m-%d %H:%M:%S'[root@CentosTe tmp]# ll总计 24-rwx------ 1  ...

  6. js/jquery去掉空格,回车,换行

    Jquery:$("#accuracy").val($("#accuracy").val().replace(/\ +/g,""));//去 ...

  7. Spark开发常用参数

    Driver spark.driver.cores driver端分配的核数,默认为1,thriftserver是启动thriftserver服务的机器,资源充足的话可以尽量给多. spark.dri ...

  8. 第六届蓝桥杯java b组第二题

    立方变自身 观察下面的现象,某个数字的立方,按位累加仍然等于自身. 1^3 = 1 8^3 = 512 5+1+2=8 17^3 = 4913 4+9+1+3=17 … 请你计算包括1,8,17在内, ...

  9. 洗牌Shuffle'm Up POJ-3087 模拟

    题目链接:Shuffle'm Up 题目大意 模拟纸牌的洗牌过程,已知两个牌数相等的牌堆.求解经过多少次洗牌的过程,使牌的顺序与目标顺序相同. 思路 直接模拟,主要是字符串的操作.问题是,如何判断出不 ...

  10. swagger2的简单使用

    swagger2的简单使用 优点: 可以生成文档形式的API并提供给不同的团队使用 便于自己单测 无需过多冗余的word文档,这一点很重要,因为我在工作中就遇到这么一个情况,由于开发使用的文档和最新文 ...