在已导入的工程中添加Spring Security的依赖

<!--添加Spring Security 依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>

在使用SpringSecurity框架,该框架会默认自动地替我们将系统中的资源进行保护,每次访问资源的时候都必须经过一层身份的校验,如果通过了则重定向到我们输入的url中,否则访问是要被拒绝的。那么SpringSecurity框架是如何实现的呢? Spring Security功能的实现主要是由一系列过滤器相互配合完成。也称之为过滤器链

1、过滤器链介绍

过滤器是一种典型的AOP思想,下面简单了解下这些过滤器链,后续再源码剖析中在涉及到过滤器链在仔细讲解.

1.org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter

根据请求封装获取WebAsyncManager,从WebAsyncManager获取/注册的安全上下文可调用处理拦截器

2. org.springframework.security.web.context.SecurityContextPersistenceFilter 

SecurityContextPersistenceFilter主要是使用SecurityContextRepository在session中保存或更新一个SecurityContext,并将SecurityContext给以后的过滤器使用,来为后续fifilter建立所需的上下文。SecurityContext中存储了当前用户的认证以及权限信息。 

3. org.springframework.security.web.header.HeaderWriterFilter 

向请求的Header中添加相应的信息,可在http标签内部使用security:headers来控制

4. org.springframework.security.web.csrf.CsrfFilter

csrf又称跨域请求伪造,SpringSecurity会对所有post请求验证是否包含系统生成的csrf的token信息,如果不包含,则报错。起到防止csrf攻击的效果。 

5. org.springframework.security.web.authentication.logout.LogoutFilter

匹配URL为/logout的请求,实现用户退出,清除认证信息。 

6.org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter 

表单认证操作全靠这个过滤器,默认匹配URL为/login且必须为POST请求。

7. org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter 

如果没有在配置文件中指定认证页面,则由该过滤器生成一个默认认证页面。 

8. org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter 

由此过滤器可以生产一个默认的退出登录页面 

9. org.springframework.security.web.authentication.www.BasicAuthenticationFilter 

此过滤器会自动解析HTTP请求中头部名字为Authentication,且以Basic开头的头信息。

10. org.springframework.security.web.savedrequest.RequestCacheAwareFilter 

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

11.org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter

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

12. org.springframework.security.web.authentication.AnonymousAuthenticationFilter 

当SecurityContextHolder中认证信息为空,则会创建一个匿名用户存入到SecurityContextHolder中。spring security为了兼容未登录的访问,也走了一套认证流程,只不过是一个匿名的身份。 

13. org.springframework.security.web.session.SessionManagementFilter 

securityContextRepository限制同一用户开启多个会话的数量 

14. org.springframework.security.web.access.ExceptionTranslationFilter 

异常转换过滤器位于整个springSecurityFilterChain的后方,用来转换整个链路中出现的异常 

15. org.springframework.security.web.access.intercept.FilterSecurityInterceptor 

获取所配置资源访问的授权信息,根据SecurityContextHolder中存储的用户信息来决定其是否有权限。 

Spring Security默认加载15个过滤器, 但是随着配置可以增加或者删除一些过滤器.

2、认证方式

2.1、HttpBasic认证

HttpBasic登录验证模式是Spring Security实现登录验证最简单的一种方式,也可以说是最简陋的一种方式。它的目的并不是保障登录验证的绝对安全,而是提供一种“防君子不防小人”的登录验证。

在使用的Spring Boot早期版本为1.X版本,依赖的Security 4.X版本,那么就无需任何配置,启动项目访问则会弹出默认的httpbasic认证。现在使用的是spring boot2.0以上版本(依赖Security5.X版本),HttpBasic不再是默认的验证模式,在spring security 5.x默认的验证模式已经是表单模式。

HttpBasic模式要求传输的用户名密码使用Base64模式进行加密。如果用户名是 "admin" ,密码是“ admin”,则将字符串"admin:admin" 使用Base64编码算法加密。加密结果可能是:YWtaW46YWRtaW4=。HttpBasic模式真的是非常简单又简陋的验证模式,Base64的加密算法是可逆的,想要破解并不难.

2.2、formLogin登录认证模式

Spring Security的HttpBasic模式,该模式比较简单,只是进行了通过携带Http的Header进行简单的登录验证,而且没有定制的登录页面,所以使用场景比较窄。对于一个完整的应用系统,与登录验证相关的页面都是高度定制化的,非常美观而且提供多种登录方式。这就需要SpringSecurity支持我们自己定制登录页面, spring boot2.0以上版本(依赖Security 5.X版本)默认会生成一个登录页面.

SpringSecurity认证基本原理与认证2种方式相关推荐

  1. oracle SQL认证考试,sql认证(sql server认证考试)

    1.Windows 身份复验证模式 当用户通过 Microsoft Windows 用户帐户进行连接时,SQL Server 使用 Windows 操作系统中的信息验证帐户名和密码.这是默认的身份验证 ...

  2. SpringSecurity用户认证设置用户名和密码的三种方式

    文章目录 SpringSecurity用户认证设置用户名和密码的三种方式 首先明白几个单词的意思: SpringSecurity默认的用户认证 1.通过配置文件进行用户认证 2.通过配置类进行用户认证 ...

  3. Web APi之认证(Authentication)两种实现方式【二】(十三)

    前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底 ...

  4. LDAP认证的两种方式

    LDAP认证的两种方式 [第一种] . FastBindLdapAuthenticationHandler 这种认证处理器一般用于DN是由用户名直接组成的,比如:uid=%u,ou=dev,dc=mi ...

  5. 【Http认证】Http的四种认证方式

    一.Http Basic Authentication 基本认证 将认证的信息填写到请求头,参考博客文章: 二.Http Digest Authentication Digest认证 以上这两种认证方 ...

  6. HTTP的几种认证方式之BASIC 认证(基本认证)

    目录 1.BASIC 认证(基本认证)的步骤 2.BASIC 认证的的缺点 3.Java + SpringBoot 实现 BASIC 认证的Demo 4.测试 5.注意事项 6.Java + Spri ...

  7. Spring Boot 实现通用 Auth 认证的 4 种方式

    欢迎关注方志朋的博客,回复"666"获面试宝典 文章介绍了spring-boot中实现通用auth的四种方式,包括 传统AOP.拦截器.参数解析器和过滤器,并提供了对应的实例代码, ...

  8. 今天大佬告诉你Spring Boot 实现通用 Auth 认证的 4 种方式!

    最近一直被无尽的业务需求淹没,没时间喘息,终于接到一个能让我突破代码舒适区的活儿,解决它的过程非常曲折,一度让我怀疑人生,不过收获也很大,代码方面不明显,但感觉自己抹掉了 java.Tomcat.Sp ...

  9. 在Spring Boot中实现通用Auth认证的几种方式

    来源 | https://zhenbianshu.github.io/ 文章介绍了spring-boot中实现通用auth的四种方式,包括 传统AOP.拦截器.参数解析器和过滤器,并提供了对应的实例代 ...

  10. 厉害,我带的实习生仅用四步就整合好SpringSecurity+JWT实现登录认证

    小二是新来的实习生,作为技术 leader,我还是很负责任的,有什么锅都想甩给他,啊,不,一不小心怎么把心里话全说出来了呢?重来! 小二是新来的实习生,作为技术 leader,我还是很负责任的,有什么 ...

最新文章

  1. 软RAID创建手册-win2003
  2. android+包+反编译,简单的Android之apk包反编译方法
  3. iOS FMDB官方使用文档 G-C-D的使用 提高性能(翻译)(转)
  4. php basic syntax
  5. 手写实现简单的Vue事件总线
  6. Uber 提出损失变化分配方法 LCA,揭秘神经网络“黑盒” 60s测试:你是否适合转型人工智能? https://edu.csdn.net/topic/ai30?utm_source=csdn_bw
  7. java重新打开jframe,Java的; Jframe不重新绘制
  8. 专用字典_字典生成工具_crunch
  9. 故障:Outlook 收发邮件时的 0x800CCC1A 错误
  10. MySQL中Packet for query is too large (1327736 1048576)错误
  11. Xilinx FPGA的DNA是什么?
  12. 站在巨人的肩膀上-听课感想
  13. 300句子与7000单词
  14. codewars练习(javascript)-2021/2/17
  15. docker的目录挂载
  16. 鸟哥的linux私房菜-基础学习篇 读书笔记
  17. css好看的图片投影,css3常见好看的投影效果_css3阴影box-shadow高大上用法
  18. esim办理出现差错_中国联通科普eSIM卡使用攻略 关于eSIM卡常见问题答疑
  19. GOOGLE工具大全+搜索引擎免费登陆入口
  20. html轮播图片加超链接,求助HTML5 图片轮播

热门文章

  1. 第十届蓝桥杯单片机组(省赛代码)
  2. Failed to initialize NVML 长效解决方法
  3. 2020.7-8月份暑假培训总结
  4. 显卡是什么?显卡和Graphics的区别在哪里?
  5. 八、T100库存管理系统之月结管理
  6. java 实现 excel normsdist_Excel函数NormSDist和NormSInv的VB实现
  7. 瀑布流插件vue-masonry(使用和踩坑心得)适合Vue脚手架开发(适用于Vue2)
  8. 腾讯2021校园招聘-后台综合-第一次笔试 8.23 20.00-22.00 Apare_xzc
  9. Django项目报错记录1
  10. 薅羊毛 | 揭秘闲鱼方案,一部手机,实现随时随地薅羊毛