当前位置: 首页 > news >正文

廊坊网站建设公司费用免费的舆情网站入口在哪

廊坊网站建设公司费用,免费的舆情网站入口在哪,长沙设计网站排名,做网站设计用到的软件Spring Boot集成Spring Security之登录登出业务逻辑 一、概要说明二、基于内存的用户名密码1、默认用户名密码2、自定义用户名密码3、为方便测试添加测试接口TestController 三、登录登出重要概念介绍四、登录业务逻辑1、登录业务相关过滤器2、访问业务请求处理流程①、访问业务…

Spring Boot集成Spring Security之登录登出业务逻辑

  • 一、概要说明
  • 二、基于内存的用户名密码
    • 1、默认用户名密码
    • 2、自定义用户名密码
    • 3、为方便测试添加测试接口TestController
  • 三、登录登出重要概念介绍
  • 四、登录业务逻辑
    • 1、登录业务相关过滤器
    • 2、访问业务请求处理流程
      • ①、访问业务请求地址被拦截,重定向到登录页面请求
      • ②、重定向定页面请求,返回登录页面
      • ③、输入正确用户名密码,重定向到业务请求
      • ④、重定向到业务请求
  • 五、登出业务实现逻辑
    • 1、登出业务相关过滤器
    • 2、访问登出页面请求处理流程
    • 3、登出页面确认登出请求处理流程
      • ①、确认登出,重定向到登录页面请求
      • ②、登录页面请求
  • 六、说明
  • 七、Spring Boot集成Spring Security专栏

一、概要说明

  1. 本文主要介绍登录登出业务流程,所以使用基于内存的用户名密码,暂不介绍授权相关内容,后续会详细介绍基于数据库的认证及授权
  2. 如何查看基于内存的默认用户名密码
  3. 如何配置基于内存的自定义用户名密码
  4. 本文与上文有强关联性,如果对过滤器链中登录相关的过滤器不熟悉的同学,请先查看过滤器链详解

二、基于内存的用户名密码

1、默认用户名密码

  1. 一、Spring Boot集成Spring Security之自动装配中第五节已介绍当用户未自定义认证接口时,生成默认认证接口inMemoryUserDetailsManager,其中用户名为user,密码为随机生成的uuid,项目启动时会打印在控制台中
    在这里插入图片描述
  2. 用户名密码源码
    在这里插入图片描述

2、自定义用户名密码

  1. 上一小节【用户名密码源码】中配置绑定可以配置自定义用户名、密码
  2. 通过配置文件配置用户名密码
    在这里插入图片描述

3、为方便测试添加测试接口TestController

package com.yu.demo.web;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/test")
public class TestController {@GetMapping("/hello")public String hello() {return "success";}}

在这里插入图片描述

三、登录登出重要概念介绍

  1. 安全上下文仓库(SecurityContextRepository):用于存储安全上下文,默认基于session实现(HttpSessionSecurityContextRepository)
  2. 安全上下文持有者(SecurityContextHolder):用于存储本次请求的安全上下文,默认基于ThreadLocal实现
  3. 安全上下文(SecurityContext):用于存储认证信息
  4. 认证信息(Authentication):用于存储用户及认证结果信息,主要实现类有
    • 用户名密码认证Token:UsernamePasswordAuthenticationToken
    • 匿名认证Token:AnonymousAuthenticationToken
  5. 登录页面请求:跳转到登录页面的请求
  6. 登录请求:在登录页面输入用户名密码后提交的请求
  7. 登出页面请求:跳转到登出页面的请求
  8. 登出请求:在登出页面确认登出提交的请求

四、登录业务逻辑

1、登录业务相关过滤器

  1. SecurityContextPersistenceFilter
  2. UsernamePasswordAuthenticationFilter
  3. DefaultLoginPageGeneratingFilter
  4. AnonymousAuthenticationFilter
  5. ExceptionTranslationFilter
  6. FilterSecurityInterceptor

2、访问业务请求处理流程

①、访问业务请求地址被拦截,重定向到登录页面请求

  1. 浏览器访问业务请求地址:http://localhost:8080/test/hello
  2. SecurityContextPersistenceFilter处理请求:
    1. 从安全上下文仓库中获取安全上下文为空,创建没有认证信息的安全上下文(SecurityContextImpl)
    2. 将第1步中获取的安全上下文设置到安全上下文持有者中
    3. 执行后续过滤器链
  3. AnonymousAuthenticationFilter处理请求:
    1. 获取安全上下文持有者中的安全上下文中的认证信息为空
    2. 创建匿名认证信息
    3. 创建新的没有认证信息的安全上下文
    4. 将第2步中的匿名认证信息设置到第3步中的安全上下文中
    5. 将第3步中的安全上下文中设置到安全上下文持有者中
    6. 执行后续过滤器链
  4. FilterSecurityInterceptor处理请求:
    1. 验证安全上下文持有者中的安全上下文中的匿名认证信息通过
    2. 验证授权信息失败(业务请求地址未设置可以匿名访问时),抛出AccessDeniedException异常
  5. ExceptionTranslationFilter处理请求:
    1. 捕获FilterSecurityInterceptor抛出的AccessDeniedException异常
    2. 判断是因为匿名访问导致的授权异常
    3. 创建新的没有认证信息的安全上下文
    4. 将第3步中的安全上下文中设置到安全上下文持有者中
    5. 重定向到登录页面:http://localhost:8080/login
  6. SecurityContextPersistenceFilter处理请求:
    1. 执行chain.doFilter之后的代码
    2. 获取安全上下文持有者中的安全上下文
    3. 删除安全上下文持有者中的安全上下文
    4. 将第2步中获取的安全上下文保存到安全上下文仓库中
  7. 重定向登录页面请求:http://localhost:8080/login(GET)

②、重定向定页面请求,返回登录页面

  1. SecurityContextPersistenceFilter处理请求:
    1. 从安全上下文仓库中获取安全上下文为空,创建没有认证信息的安全上下文(SecurityContextImpl)
    2. 将第1步中获取的安全上下文设置到安全上下文持有者中
    3. 执行后续过滤器链
  2. DefaultLoginPageGeneratingFilter处理请求:
    1. 判断是跳转到登录页面的请求
    2. 生成默认登录页面
    3. 返回并渲染生成的默认登录页面(不在调用后续过滤器,调用前面Filter中chain.doFilter之后的代码)
  3. SecurityContextPersistenceFilter处理请求:
    1. 执行chain.doFilter之后的代码
    2. 获取安全上下文持有者中的安全上下文
    3. 删除安全上下文持有者中的安全上下文
    4. 将第2步中获取的安全上下文保存到安全上下文仓库中

③、输入正确用户名密码,重定向到业务请求

  1. SecurityContextPersistenceFilter处理请求:
    1. 从安全上下文仓库中获取安全上下文为空,创建没有认证信息的安全上下文(SecurityContextImpl)
    2. 将第1步中获取的安全上下文设置到安全上下文持有者中
    3. 执行后续过滤器链
  2. UsernamePasswordAuthenticationFilter处理请求:
    1. 判断需要认证(AbstractAuthenticationProcessingFilter.doFilter方法)
    2. 认证用户名密码成功,生成已认证的认证信息UsernamePasswordAuthenticationToken
    3. 创建新的没有认证信息的安全上下文
    4. 将第2步中的认证信息设置到第3步中的安全上下文中
    5. 将第3步中的安全上下文设置到安全上下文持有者中
    6. 将第3步中的安全上下文保存到局部变量安全上下文仓库中(空实现)
    7. 重定向到业务请求地址:http://localhost:8080/test/hello
  3. SecurityContextPersistenceFilter处理请求:
    1. 执行chain.doFilter之后的代码
    2. 获取安全上下文持有者中的安全上下文
    3. 删除安全上下文持有者中的安全上下文
    4. 将第2步中获取的安全上下文保存到安全上下文仓库中

④、重定向到业务请求

  1. SecurityContextPersistenceFilter处理请求:
    1. 从安全上下文仓库中获取已认证的安全上下文
    2. 将第1步中获取的安全上下文设置到安全上下文持有者中
    3. 执行后续过滤器链
  2. FilterSecurityInterceptor处理请求:
    1. 验证安全上下文持有者中的安全上下文中的认证信息通过
    2. 验证授权成功
    3. 进入DispatcherServlet,分发请求到具体的controller
    4. 调用接口返回数据
  3. SecurityContextPersistenceFilter处理请求:
    1. 执行chain.doFilter之后的代码
    2. 获取安全上下文持有者中的安全上下文
    3. 删除安全上下文持有者中的安全上下文
    4. 将第2步中获取的安全上下文保存到安全上下文仓库中

五、登出业务实现逻辑

1、登出业务相关过滤器

  1. SecurityContextPersistenceFilter
  2. LogoutFilter
  3. DefaultLogoutPageGeneratingFilter

2、访问登出页面请求处理流程

  1. 浏览器访问登出请求地址:http://localhost:8080/logout
  2. SecurityContextPersistenceFilter处理请求:
    1. 从安全上下文仓库中获取已认证的安全上下文
    2. 将第1步中获取的安全上下文设置到安全上下文持有者中
    3. 执行后续过滤器链
  3. DefaultLogoutPageGeneratingFilter处理请求:
    1. 判断是跳转到登出页面的请求
    2. 生成默认登出页面
    3. 返回并渲染生成的默认登出页面(不在调用后续过滤器,调用前面Filter中chain.doFilter之后的代码)
  4. SecurityContextPersistenceFilter处理请求:
    1. 执行chain.doFilter之后的代码
    2. 获取安全上下文持有者中的安全上下文
    3. 删除安全上下文持有者中的安全上下文
    4. 将第2步中获取的安全上下文保存到安全上下文仓库中

3、登出页面确认登出请求处理流程

①、确认登出,重定向到登录页面请求

  1. SecurityContextPersistenceFilter处理请求:
    1. 从安全上下文仓库中获取已认证的安全上下文
    2. 将第1步中获取的安全上下文设置到安全上下文持有者中
    3. 执行后续过滤器链
  2. LogoutFilter处理请求:
    1. 判断是登出请求
    2. 获取安全上下文持有者中的安全上下文
    3. 登出处理器处理登出业务
      1. 删除安全上下文持有者中的安全上下文
      2. 创建没有认证信息的安全上下文
      3. 将第2步中的安全上下文保存到安全上下文仓库中
    4. 重定向到登录页面
  3. SecurityContextPersistenceFilter处理请求:
    1. 执行chain.doFilter之后的代码
    2. 获取安全上下文持有者中的安全上下文
    3. 删除安全上下文持有者中的安全上下文
    4. 将第2步中获取的安全上下文保存到安全上下文仓库中

②、登录页面请求

第三节登录业务逻辑已介绍,不再赘述。

六、说明

  1. Spring Boot集成Spring Security默认是非前后分离架构
  2. 本文介绍的流程是非前后分离版本的处理流程
  3. 前后分离处理流程较为简单
    1. 未认证时访问业务接口,返回未认证错误信息
    2. 调用登录接口成功后返回Token,此后请求头中携带此Token
    3. 调用登出接口成功后返回成功,后端将该Token失效
    4. 携带Token访问业务接口,后端验证Token成功后,调用业务接口并返回数据

七、Spring Boot集成Spring Security专栏

一、Spring Boot集成Spring Security之自动装配
二、Spring Boot集成Spring Security之实现原理
三、Spring Boot集成Spring Security之securityFilterChain过滤器链详解
四、Spring Boot集成Spring Security之登录登出业务逻辑
五、Spring Boot集成Spring Security之登录成功后自动认证业务实现逻辑(未完成)
六、Spring Boot集成Spring Security之自定义securityFilterChain过滤器链(未完成)
七、Spring Boot集成Spring Security之自定义基于JWT的用户名密码认证(未完成)
八、Spring Boot集成Spring Security之登录成功后JWT自动认证(未完成)
九、Spring Boot集成Spring Security之验证码认证(未完成)

http://www.tj-hxxt.cn/news/1661.html

相关文章:

  • 视频转网址在线生成单页应用seo如何解决
  • 上传到服务器的网站打开是空白微信销售平台
  • 顺丰"嘿客"商业模式分析:从传统b2c网站建设到顺丰seo培训价格
  • 西部数码个人网站搜索引擎营销是什么意思
  • 郑州网站建设三牛推广网
  • asp做网站好不好seo标题优化步骤
  • 用ih5做微网站站长工具浪潮
  • wordpress 关键词过滤seo优化排名怎么做
  • dede网站底部提升网页优化排名
  • jsp网站开发总结推广关键词如何优化
  • 收费网站建设找文网客服联系方式
  • 比较出名做耐克的网站媒体广告投放平台
  • 梧州网站平台建设公司seo快速排名利器
  • 如何做flash游戏下载网站关键词在线听免费
  • 广东的一起做网站搜狗收录批量查询
  • 最专业网站建设哪家好seo优化网站百度技术
  • wordpress国外主题公园seo外推软件
  • wap网站格式常州网站优化
  • 郑州做网站公司 汉狮网络专业app营销策划方案
  • 做非法网站网站推广优化外链
  • 网站在工信部备案查询seo推广要多少钱
  • 做游戏特效的网站网站提交收录入口链接
  • 网站渗透入侵全部教程网络营销策略的演变
  • 泊头哪里有做网站的济南专业做网站
  • 做内部网站费用站长工具域名解析
  • 网站漂浮广告怎么做亿速云
  • ui设计与网站建设廊坊自动seo
  • jsp网站开发的环境配置过程百度一下官方网站
  • 做网站必看的外国书籍优化设计三年级下册数学答案
  • 百度公司可以建设网站百度seo收录软件