SpringSecurity完整认证流程(包含自定义页面和自定义登录逻辑)

这篇具有很好参考价值的文章主要介绍了SpringSecurity完整认证流程(包含自定义页面和自定义登录逻辑)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

认证基本流程图:
SpringSecurity完整认证流程(包含自定义页面和自定义登录逻辑),java杂谈,服务器,数据库,运维

1. 用户发起表单登录请求后,首先进入UsernamePasswordAuthenticationFilter

SpringSecurity完整认证流程(包含自定义页面和自定义登录逻辑),java杂谈,服务器,数据库,运维
​ 在 UsernamePasswordAuthenticationFilter 中根据用户输入的用户名、密码构建了 UsernamePasswordAuthenticationToken,并将其交给 AuthenticationManager 来进行认证处理。

​ AuthenticationManager 本身不包含认证逻辑,其核心是用来管理所有的 AuthenticationProvider,通过交由合适的 AuthenticationProvider 来实现认证。

2.下面跳转到了 ProviderManager ,该类是 AuthenticationManager 的实现类

SpringSecurity完整认证流程(包含自定义页面和自定义登录逻辑),java杂谈,服务器,数据库,运维
我们知道不同的登录逻辑它的认证方式是不一样的,比如我们表单登录需要认证用户名和密码,但是当我们使用三方登录时就不需要验证密码。

​ Spring Security 支持多种认证逻辑,每一种认证逻辑的认证方式其实就是一种 AuthenticationProvider。通过 getProviders() 方法就能获取所有的 AuthenticationProvider,通过 provider.supports() 来判断 provider 是否支持当前的认证逻辑。当选择好一个合适的 AuthenticationProvider 后,通过 provider.authenticate(authentication) 来让 AuthenticationProvider 进行认证。

3.传统表单登录的 AuthenticationProvider 主要是由 AbstractUserDetailsAuthenticationProvider 来进行处理的,我们来看下它的 authenticate()方法。

SpringSecurity完整认证流程(包含自定义页面和自定义登录逻辑),java杂谈,服务器,数据库,运维
retrieveUser() 的具体实现在 DaoAuthenticationProvider 中,代码如下:
SpringSecurity完整认证流程(包含自定义页面和自定义登录逻辑),java杂谈,服务器,数据库,运维
当我们成功的读取 UserDetails 后,下面开始对其进行认证:
SpringSecurity完整认证流程(包含自定义页面和自定义登录逻辑),java杂谈,服务器,数据库,运维
在上图中,我们可以看到认证校验分为 前校验、附加校验和后校验,如果任何一个校验出错,就会抛出相应的异常。所有校验都通过后,调用 createSuccessAuthentication() 返回认证信息
SpringSecurity完整认证流程(包含自定义页面和自定义登录逻辑),java杂谈,服务器,数据库,运维
在 createSuccessAuthentication 方法中,我们发现它重新 new 了一个 UsernamePasswordAuthenticationToken,因为到这里认证已经通过了,所以将 authorities 注入进去,并设置 authenticated 为 true,即需要认证

4.至此认证信息就被传递回 UsernamePasswordAuthenticationFilter 中,在 UsernamePasswordAuthenticationFilter 的父类 AbstractAuthenticationProcessingFilter 的 doFilter() 中,会根据认证的成功或者失败调用相应的 handler:

SpringSecurity完整认证流程(包含自定义页面和自定义登录逻辑),java杂谈,服务器,数据库,运维
​ 这里调用的 handler 实际就是我们在配置文件中配置的 successHandler() 和 failureHandler()。文章来源地址https://www.toymoban.com/news/detail-792741.html

5.流程总结

  1. 用户在浏览器中随意输入一个URL。
  2. Spring Security 会判断当前是否已经被认证(登录)如果已经认证,正常访问URL。如果没有被认证跳转到loginPage()对应的URL中,显示登录页面。
  3. 用户输入用户名和密码点击登录按钮后,发送请求到登录url。
  4. 如果url和loginProcessingUrl()一样才执行登录流程。否则需要重新认证。
    1. 执行登录流程时首先被UsernamePasswordAuthenticationFilter进行过滤,取出用户名和密码,放入到容器(UsernamePasswordAuthenticationToken)中。根据usernameParameter和passwordParameter进行取用户名和密码,如果没有配置这两个方法,默认为请求参数名username和password]把UsernamePasswordAuthenticationToken 交给 AuthenticationManager对象进行匹配管理,在当前方法中会进行认证方式匹配(AuthenticationProvider )
  5. 我们使用表单是AbstractUserDetailsAuthenticationProvider,再次调用retrieveUser()执行自定义登录逻辑UserDetailsService的实现类。返回数据库中保存当前用户信息,然后调用三次检查方法
    1. preAuthenticationChecks.check(user);
    2. additionalAuthenticationChecks(user,authentication);
    3. postAuthenticationChecks.check(user);,
  6. 判断用户名是否存在和数据库中密码是否和客户端传递过来的密码匹配。
  7. 如果登录成功(经过AbstractAuthenticationProcessingFilter中doFliter()进行跳转),跳转到successForwardUrl(转发)/successHandler(自己控制跳转方式)配置的URL如果登录失败,跳转到failureForwardUrl/failureHandler
  8. 如果没有配置成功和失败转发URL,会跳转到用户之前希望访问的URL。

到了这里,关于SpringSecurity完整认证流程(包含自定义页面和自定义登录逻辑)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OAuth2认证流程

    目录 什么是OAuth2 1. OAuth2认证流程 1、用户点击微信扫码 2、用户授权黑马网站访问用户信息 3、黑马程序员的网站获取到授权码 4、携带授权码请求微信认证服务器申请令牌 5、微信认证服务器向黑马程序员的网站响应令牌 6、黑马程序员网站请求微信资源服务器获取资源即用

    2024年02月16日
    浏览(40)
  • Spring Security认证流程分析

    先分别实现 userdetailsService,userDetails,passwordEncoder三个接口, 然后就是写登录逻辑 本文章用的是继承UsernamePasswordAuthenticationFilter这个接口 因为这个框架默认登录逻辑是在这里面的,里面的核心就是通过 这里这个接口可以不用写过滤器里,可以直接写在serviceImpl里面的登录逻

    2024年04月28日
    浏览(33)
  • Kerberos认证流程及基本操作

    Kerberos主要是有三个重要的角色: 1、访问服务的Client 2、提供服务的Server 3、KDC(Key Distribution Center)密钥分发中心,其中报错AS(authorization server)和TGS(ticket granting server)   上图 AD其实类似于一个本机的一个数据库,存储所有client的白名单。 根据上图我们梳理胰腺癌Kerb

    2024年02月11日
    浏览(36)
  • 多因素身份认证 (MFA) 插件:手机验证码认证因素配置流程

    对用户表扩展手机号码字段,允许用户通过手机号码与验证码的方式进行认证,注册,重置密码以及更换手机号。 多因素身份认证 (MFA) 是保护企业 IT 资源访问安全的一种关键工具,也是零信任安全模型的核心组成。特别在远程办公以及数据泄露事件层出不穷的背景下,越来

    2024年02月09日
    浏览(42)
  • EMQ X如何生成认证信息?身份认证流程和操作步骤

    身份认证是大多数应用的重要组成部分,EMQ X 中的认证指的是当一个客户端连接到 EMQ X 的时候,通过服务器端的配置来控制客户端连接服务器的权限。 EMQ X 的认证支持包括两个层面: • MQTT 协议本身在 CONNECT 报文中指定用户名和密码,EMQ X 以插件形式支持基于 Username、 Cl

    2024年02月11日
    浏览(36)
  • spring security认证授权流程

    认证和授权是任何安全体系中的两个主要功能,而在现代Web开发中,Spring Security是最受欢迎和广泛使用的安全框架之一。在本篇文章中,我们将全面介绍Spring Security的认证和授权机制,并提供详细的步骤和示例代码。  一、认证(Authentication) 认证的主要目的是验证用户的身

    2024年02月15日
    浏览(34)
  • ITSS认证流程,ITSS应该怎么办理

    ITSS认证 流程, ITSS 应该怎么办理 一、什么是ITSS ITSS(Information Technology Service Standards 信息技术服务标准,简称ITSS)是国内第一套成体系和综合配套的信息技术服务标准库,全面规范了IT服务产品及其组成要素,用于指导实施标准化和可信赖的IT服务。  ITSS的内容即主要包括一系

    2024年02月11日
    浏览(42)
  • nestjs之JWT认证实现流程

    nestjs的jwt认证利用了 Passport.js 的认证机制。要根据这个源码实现您自己的 AuthGuard,需要理解几个关键部分:如何集成 Passport.js、如何处理认证结果,以及如何使用 NestJS 的依赖注入系统。 先自定义一个策略函数类 PassportStrategy 函数返回的是 MixinStrategy 类,该类提供 callback 去

    2024年01月17日
    浏览(34)
  • Java【算法 04】HTTP的认证方式之DIGEST认证详细流程说明及举例

    详细的说明文档:WWW-Authenticate - HTTP | MDN (mozilla.org) 摘要认证(Digest Authentication)是一种用于在网络通信中验证用户身份的认证方法。它主要应用于HTTP和其他应用层协议中。 Digest认证相对于基本认证更加安全,因为它不直接传输明文密码。但它也不是完全的安全解决方案,因

    2024年02月13日
    浏览(32)
  • 阿里云ACP专业认证考试流程

    云计算并不是新兴领域,云计算是所有互联网服务的基础,可以说,未来云计算领域会成为传统行业,人们使用云计算资源就像用水、用电一样常见和方便。阿里云、腾讯云、百度云、华为云、美团云、滴滴云等等互联网大佬都开启了云计算领域,云计算领域绝对是朝阳行业

    2024年01月21日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包