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

相关推荐
无念是……2 分钟前
K8s 控制器管理详解|RC、RS、Deployment、StatefulSet、DaemonSet、Job&CronJob
云原生·容器·kubernetes·控制器
杨丰玮41812 分钟前
暑假Java知识点回顾:类与对象知识总结
java·开发语言
盐焗鹌鹑蛋13 分钟前
【Linux】ELF与库加载
java·linux·服务器
EterNity_TiMe_16 分钟前
一个网页管理多种远程连接:Docker 部署 Next Terminal 与资产审计
运维·人工智能·docker·ai·容器
WarPigs17 分钟前
Unity未激活的物体无法响应事件?
java·unity·游戏引擎
十五喵源码网22 分钟前
基于SpringBoot2+vue2的公寓报修管理系统
java·毕业设计·springboot·论文笔记
mohesashou23 分钟前
k8s的pod管理
云原生·容器·kubernetes
珍珠先生23 分钟前
第16章 集合框架:List 与 Set
java
薛定猫AI42 分钟前
【深度解析】DeepSeek Harness:可插拔智能体运行时如何连接大模型与真实计算机
java·运维·网络
rannn_1111 小时前
【力扣hot100】回溯专题|全排列、子集、字母组合、组合总和、括号生成、单词搜索、分割回文串、N皇后
java·算法·leetcode·回溯