IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> SpringSecurity如何理解学习常用拦截器——举例进行学习——从0到1教会方法自行学习~ -> 正文阅读

[系统运维]SpringSecurity如何理解学习常用拦截器——举例进行学习——从0到1教会方法自行学习~

📑本篇内容:如何理解学习SpringSecurity的常用拦截器——举例进行学习

📘 文章专栏:前后端分离项目(Vue + SpringBoot)

🎬最近更新:2022年2月5日 Nginx 入门到实战案例 配置反向代理、负载均衡、动静分离以及对Nginx高可用的服务器集群

🙊个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)

🌇点赞 👍 收藏 ?留言 📝 一键三连 关爱程序猿,从你我做起

📑如何理解原理并学习SpringSecurity的常用拦截器——举例进行学习

🚀1、SpringSecurity官方文档进行学习

SpringSecurity官方参阅文献

Hello Spring Security :: Spring Security

?SpringSecurity中的SpringBootAutoConfiguration?

在这里插入图片描述

官方文档:

  • SpringSecurity默认的自动装配配置。创建了一个叫做springSecurityFilterChain 的 Servlet Filter 过滤器链,将这个组件注入到Spring容器当中,他负责针对于应用程序的路径地址、进行验证提交的用户名和密码、如果失败则重新定向到登录表单等操作。

  • 创建了一个叫做 UserDetailsService 的用户细节服务的组件bean,该bean的username为user,并且随机生成了一串密码以日志形式展示在控制台中。

  • 针对于所有的请求,向Servlet容器中注册了一个名为springSecurityFilterChain的过滤器Bean。

🚀2、常用到的过滤器链解析——举例学习

?UsernamePasswordAuthenticationFilter?

学习参考地址

Spring Security UsernamePasswordAuthenticationFilter

在这里插入图片描述

  • 当我们的用户名和密码进行提交之后,过滤器链中的UsernamePasswordAuthenticationFilter 就会开始对用户名和密码进行身份认证,UsernamePasswordAuthenticationFilter 类继承了 AbstractAuthenticationProcessingFilter 这个抽象类。

AbstractAuthenticationProcessingFilter 是干啥的有啥用?

学习参考地址:Spring Security AbstractAuthenticationProcessingFilter

在这里插入图片描述

简单来说:这个抽象类是用于验证用户凭据的基本过滤器的抽象类。在验证凭据之前会通过使用AuthenticationEntryPoint类来请求凭据。

AuthenticationEntryPoint 又是干啥的呢?

学习参考地址:Spring Security AuthenticationEntryPoint

在这里插入图片描述

通过对源码的查看:

public interface AuthenticationEntryPoint {
    void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException;
}

这个是个接口 其具体的实现类如图所示:

在这里插入图片描述

简单来说:我们可以理解这个接口是用于实现接受客户端发来的凭据,然后根据凭证是否认证成功做出Http响应


然后我们回到我们的 AbstractAuthenticationProcessingFilter的学习。

当我们利用 AuthenticationEntryPoint 请求凭据之后,AbstractAuthenticationProcessingFilter可以验证提交给它的任何身份验证请求

如图所示:

在这里插入图片描述

  1. 当用户提交提交了凭据时,AbstractAuthenticationProcessingFilter就会从 HttpServletRequest中创建一个进行身份验证的 由 Authentication实现的一个身份验证类型进行验证。 而不同的身份验证类型 是根据继承了 AbstractAuthenticationProcessingFilter 抽象类的子类来定义的。例如:UsernamePasswordAuthenticationFilter 会根据 HttpServletRequest 中提交的用户名和密码创建一个继承了 AbstractAuthenticationToken抽象类同时实现了Authentication这个接口的UsernamePasswordAuthenticationToken类的身份认证类型来进行认证。

  2. 之后呢 ,刚才创建好实现了Authentication接口的 UsernamePasswordAuthenticationToken 身份认证类型就会传入到 AuthenticationManager 进行身份验证。

  3. 如果认证失败:

    • 会将SecurityContextHolder中的数据清空。

      什么是SecurityContextHolder呢?

      参考文档: Spring Security SecurityContextHolder

      简单来说就是:存放了Principal(用户名)、Credentials(密码凭据)、Authorities(权限)三个数据的上下文

      在这里插入图片描述

    • 接口RememberMeServices下的loginFail()方法会被执行,如果没有配置RememberMeServices服务此时就零配置。

    • 接口AuthenticationFailureHandler下的 onAuthenticationFailure()方法也会被执行。

  4. 如果认证成功:

    • SessionAuthenticationStrategy 中的onAuthentication()方法会被执行,同时收到了登录成功的Session信息。
    • Authentication认证类型信息也会设置在 SecurityContextHolder中,然后,SecurityContextPersistenceFilter 这个过滤器会将 SecurityContext保存在 HttpSession中。
    • 接口RememberMeServices下的loginSuccess()方法会被执行,如果没有配置RememberMeServices服务此时就零配置。
    • 接口ApplicationEventPublisher 下的publishEvent()方法会发布一个InteractiveAuthenticationSuccessEvent的事件。
    • 接口AuthenticationSuccessHandler下的onAuthenticationSuccess()方法会被执行。

现在我们了解了AbstractAuthenticationProcessingFilter这个抽象过滤器链,那咱们就可以来学习这个常用的过滤器链UsernamePasswordAuthenticationFilter了

在这里插入图片描述

  1. 当用户提交他们的用户名和密码时,UsernamePasswordAuthenticationFilter创建一个UsernamePasswordAuthenticationToken他是实现了Authentication接口的一个身份验证类型。通过源码得知:

    public UsernamePasswordAuthenticationToken(Object principal, Object credentials) {
            super((Collection)null);
            this.principal = principal;
            this.credentials = credentials;
            this.setAuthenticated(false);
        }
    

    实际上就是将HttpServletRequest中获取的username赋给了principal ,password赋给了credentials,同时设置了是否验证过了。

  2. 随后UsernamePasswordAuthenticationToken 身份认证类型就会传入到 AuthenticationManager 进行身份验证。

  3. 如果验证失败

    • 会将SecurityContextHolder中的数据清空。

    • 接口RememberMeServices下的loginFail()方法会被执行,如果没有配置RememberMeServices服务此时就零配置。

    • 接口AuthenticationFailureHandler下的 onAuthenticationFailure()方法也会被执行。

  4. 如果验证成功

    • SessionAuthenticationStrategy 中的onAuthentication()方法会被执行,同时收到了登录成功的Session信息。

    • Authentication认证类型信息也会设置在 SecurityContextHolder中,然后,SecurityContextPersistenceFilter 这个过滤器会将 SecurityContext保存在 HttpSession中。

    • 接口RememberMeServices下的loginSuccess()方法会被执行,如果没有配置RememberMeServices服务此时就零配置。

    • 接口ApplicationEventPublisher 下的publishEvent()方法会发布一个InteractiveAuthenticationSuccessEvent的事件。

    • AuthenticationSuccessHandler被调用。 通常交给SimpleUrlAuthenticationSuccessHandler 处理器来进行处理,当我们重定向到登录页面时,它会重定向到ExceptionTranslationFilter保存的请求地址。


🙊3、总结

以上是今天小付在整合SpringBoot与SpringSecurity时再次学习SpringSecurity的官方参考文献做出的记录,SpringSecurity中的第一个常用拦截器 UsernamePasswordAuthenticationFilter的使用及其工作原理,从其继承的抽象类AbstractAuthenticationProcessingFilter进行入手,然后通过对其分析 将身份认证时用到的UsernamePasswordAuthenticationToken认证类型也进行了分析**,如何快速掌握其原理**,也再次牢记,就先写这么多了,好久没写技术文了,今天补一篇,接着肝项目去了~

在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 13:33:29  更:2022-02-16 13:33:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:47:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码