SpringSecurity6从入门到实战之默认登录页面的生成(依旧是源码级讲解,耐心看完)

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代码进行返回写到页面上去,至此源码流程分析结束

相关推荐
智慧物业老杨3 分钟前
智慧物业数智化转型实战:从工单响应到业主满意度的闭环构建
java·开发语言
Kiling_07046 分钟前
Java集合框架:List集合详解与应用
java·开发语言·windows
极客先躯23 分钟前
高级java每日一道面试题-2025年12月08日-实战篇[Docker]-如何为 Docker 配置代理?如何为容器配置代理?
java·docker·代理配置的双层架构·docker 守护进程配置代理·为容器配置代理·构建时环境变量·运行时注入环境变量
xun-ming25 分钟前
SpringBoot和Vue3实战阿里百炼大模型极简版
spring boot·ai·vue3·智能体·百炼大模型
csdn2015_29 分钟前
java springboot 文件导入,判断第一列的值是否有重复
java·windows·spring boot
~|Bernard|43 分钟前
四,go语言中GMP调度模型
java·前端·golang
Tisfy1 小时前
LeetCode 2553.分割数组中数字的数位:模拟(maybe+翻转)——java也O(1)
java·数学·算法·leetcode·题解·模拟·取模
阿丰资源1 小时前
基于Springboot+mysql的在线兼职平台(附源码)
spring boot·后端·mysql
怪祝浙1 小时前
从简单项目入手Java(学生系统)V6(Web版本 Spring Boot3 MySQL Vue3 MyBatis)
java·spring boot·mysql
吴声子夜歌1 小时前
Java——Integer与二进制算法
java·算法