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 分钟前
Redis封装类
java·redis
lkbhua莱克瓦247 分钟前
进阶-存储过程3-存储函数
java·数据库·sql·mysql·数据库优化·视图
计算机程序设计小李同学20 分钟前
基于SSM框架的动画制作及分享网站设计
java·前端·后端·学习·ssm
鱼跃鹰飞33 分钟前
JMM 三大特性(原子性 / 可见性 / 有序性)面试精简版
java·jvm·面试
+VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue小型房屋租赁系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
该怎么办呢1 小时前
基于cesium的三维不动产登记系统的设计与实现(毕业设计)
java·毕业设计
J不A秃V头A1 小时前
多任务执行时,共享请求对象被并发修改
java
heartbeat..2 小时前
零基础学 SQL:DQL/DML/DDL/DCL 核心知识点汇总(附带连接云服务器数据库教程)
java·服务器·数据库·sql
专注于大数据技术栈2 小时前
java学习--LinkedHashSet
java·开发语言·学习
JadenOliver2 小时前
Docker 守护进程核心配置入口:daemon.json
docker·daemon.json