SpringSecurity6从入门到实战之默认登录页面的生成

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
性能测试 PTS,5000VUM额度
简介: 本文介绍了SpringSecurity在SpringBoot项目中如何自动生成默认登录页面的过程。当访问如`/hello`的受保护路由时,请求会经过多个过滤器。在AuthorizationFilter中,未认证的请求会被拦截并抛出AccessDeniedException。接着,ExceptionTranslationFilter捕获此异常并启动身份验证,调用LoginUrlAuthenticationEntryPoint的commence方法,重定向到/login。DefaultLoginPageGeneratingFilter拦截/login请求,生成并返回默认的登录页面。

SpringSecurity6从入门到实战之默认登录页面的生成

为什么我们只在SpringBoot项目中引入了依赖,访问/hello时却出现了登录的前端页面?这里我们首先先了解客户端请求发送经历了SpringSecurity中的几个默认开启的Filter.

客户端请求到登录页面生成的过程

  1. 访问地址 http://localhost:8080/hello ,会依次经过多个过滤器
  2. 当请求到达 AuthorizationFilter 时,检查发现未认证,请求被拦截,并抛出 AccessDeniedException 异常
  3. 抛出的 AccessDeniedException 异常会被 ExceptionTranslationFilter 捕获并启动身份验证,在这个 Filter 中会调用 LoginUrlAuthenticationEntryPoint 的commence 方法,要求重定向到 /login 页面
  4. 重定向到 /login ,也就是客户端发送 /login 请求
  5. /login 请求会被过滤器 DefaultLoginPageGeneratingFilter 拦截,并在过滤器中返回默认的登录页面。

详细源码流程解析

AuthorizationFilter


检查发现未认证,请求被拦截,并抛出 AccessDeniedException 异常.继续看ExceptionTranslationFilter 如何进行捕获异常

ExceptionTranslationFilter






最终会发先commence()是一个抽象方法,最终进而看到LoginUrlAuthenticationEntryPoint的commence()


也可以发现就是在这里进行重定向到/login,然后是不是还需要将登录页面返回.这里将会重新发起/login请求然后被DefaultLoginPageGeneratingFilter 拦截,返回对应的登录页面

这里已经设置了最终返回的类型为html,继续看看generateLoginPageHtml().


最终通过一个StringBuilder写入html代码进行返回写到页面上去,至此源码流程分析结束

相关文章
|
1月前
|
前端开发 安全 Java
SpringBoot 实现登录验证码(附集成SpringSecurity)
SpringBoot 实现登录验证码(附集成SpringSecurity)
|
13天前
|
Java 数据安全/隐私保护 Spring
SpringSecurity6从入门到实战之默认用户的生成流程
该文档介绍了SpringSecurity6中默认用户的生成流程。在`SecurityAutoConfiguration`源码中,通过`SecurityProperties`配置类,系统默认创建了一个名为"user"的用户,其密码是一个随机生成的UUID。这个用户是在没有在`application.properties`中设置相关配置时自动创建的。
|
9天前
|
存储 数据库 数据安全/隐私保护
SpringSecurity6从入门到实战之登录表单的提交
SpringSecurity6 教程探讨了登录表单提交的源码流程。当提交登录表单时,`UsernamePasswordAuthenticationFilter` 负责处理认证,它从请求中获取 `username` 和 `password` 参数。然后,`AuthenticationManager` 的 `authenticate()` 方法被调用,进一步委托给 `AuthenticationProvider`,通常是 `DaoAuthenticationProvider`。`DaoAuthenticationProvider` 使用 `UserDetailsService`(如 `InMemo
|
10月前
|
JSON 安全 搜索推荐
​SpringSecurity-5-自定义登录验证
​SpringSecurity-5-自定义登录验证
114 0
|
11月前
|
存储 安全 Java
SpringSecurity基础-简单登录实现
1.SpringSecurity介绍 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
71 0
|
11月前
|
存储 安全 Java
二.SpringSecurity基础-简单登录实现
SpringSecurity基础-简单登录实现
|
JSON 前端开发 搜索推荐
springboot集成shiro自定义登陆过滤器
springboot集成shiro自定义登陆过滤器
228 0
|
安全 Java 数据安全/隐私保护
Spring Security-自定义登录页面和认证过程其他常用配置
Spring Security-自定义登录页面和认证过程其他常用配置
Spring Security-自定义登录页面和认证过程其他常用配置
|
安全 Java Spring
Spring Security系列教程17--注销登录的实现及原理分析
前言 经过前面几个章节的学习,一一哥 已经带各位实现了两种方式的自动登录。咱们现在已经学会了如何自动登录,那么又该如何退出登录呢?接下来请再跟着 壹哥 把注销登录功能也实现一下吧。 一. 注销登录 1. 代码实现 我们直接在之前案例的基础上进行代码实现,这里还是在SecurityConfig类中配置,其实退出登录功能的实现很简单。 @EnableWebSecurity(debug = true) public class SecurityConfig extends WebSecurityConfigurerAdapter { @Value("${spring.security.re
307 0
JavaWeb - 过滤器之登录
JavaWeb - 过滤器之登录
87 0