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

智能小程序开发工具下载如何优化网络延迟

智能小程序开发工具下载,如何优化网络延迟,网站开发和网络工程师,网站怎么企业备案信息查询一、前言 此篇是对上篇 Spring Security 6.x 系列#xff08;5#xff09;—— Servlet 认证体系结构介绍 中4.9章节显式调用SecurityContextRepository#saveContext进行详解分析。 二、设置和修改登录态 2.1 登录态存储形式 使用Spring Security框架#xff0c;认证成功…一、前言 此篇是对上篇 Spring Security 6.x 系列5—— Servlet 认证体系结构介绍 中4.9章节显式调用SecurityContextRepository#saveContext进行详解分析。 二、设置和修改登录态 2.1 登录态存储形式 使用Spring Security框架认证成功后的用户信息会放在Authentication对象的Principal中 Authentication对象又会被放入SecurityContext中而SecurityContext 存在这2个地方 SecurityContextHolderStrategy 线程级别的SecurityContext持有策略。有全局共享、线程继承、线程隔离等几种获取上下文的方式上文有过介绍。 SecurityContextRepository持久化SecurityContext 默认存入HttpServletRequest和HttpSession。 在代码中我们要获取用户登录信息可以通过SecurityContextHolder.getContext().getAuthentication()的方式获取这种方式是从SecurityContextHolderStrategy获取用户数据。而SecurityContextHolderStrategy初始化数据又是来自SecurityContextRepository相关逻辑是在SecurityContextHolderFilter类里。 SecurityContextHolderFilter#doFilter源码如下 查看securityContextRepository如下 设想一种场景在用户登录后编辑了用户信息这时要同步刷新SecurityContext里的用户信息。我们要如何更新这两个处的用户数据呢 2.2 更新SecurityContextHolderStrategy中的用户信息 要更新SecurityContextHolderStrategy非常简单因为它保存在内存里只要通过SecurityContextHolder.getContext().getAuthentication() 获取认证信息后直接设置对应的属性内存中属性值发生变化后续处理逻辑就能读到最新值。 Authentication authentication SecurityContextHolder.getContext().getAuthentication(); MyUser myUser (MyUser) authentication.getPrincipal(); myUser.setNickname(新的昵称);2.3 更新SecurityContextRepository中的用户信息 2.3.1 了解SecurityContextRepository接口 SecurityContextRepository是一个接口源码如下 public interface SecurityContextRepository {/** deprecated */DeprecatedSecurityContext loadContext(HttpRequestResponseHolder requestResponseHolder);default DeferredSecurityContext loadDeferredContext(HttpServletRequest request) {SupplierSecurityContext supplier () - {return this.loadContext(new HttpRequestResponseHolder(request, (HttpServletResponse)null));};return new SupplierDeferredSecurityContext(SingletonSupplier.of(supplier), SecurityContextHolder.getContextHolderStrategy());}void saveContext(SecurityContext context, HttpServletRequest request, HttpServletResponse response);boolean containsContext(HttpServletRequest request); } SecurityContextRepository接口有以下几个实现类 NullSecurityContextRepository什么都不做也就是不会存储每次请求都需要重新认证HttpSessionSecurityContextRepository将SecurityContext保存在Session中获取的时候从Session中查询RequestAttributeSecurityContextRepository将SecurityContext保存在请求对象HttpServletRequest中DelegatingSecurityContextRepository委派代理存储内部维护多个SecurityContextRepository实现同时支持多种方式存储SecurityContext。 2.3.2 无法直接获取SecurityContextRepository对象 要知道怎么更新SecurityContextRepository 我们先看其他地方是怎么调用它。往SecurityContextRepository写数据是在用户认证成功之后调用AbstractAuthenticationProcessingFilter#successfulAuthentication() 方法执行认证成功的后续逻辑时。 这里的this.securityContextRepository是通过setter方法传进来的并且发现Spring Security没有把SecurityContextRepository注册到Spring容器而且Spring Security其他持有SecurityContextRepository对象的类都没有暴露SecurityContextRepository的获取方法。也就是说我们无法从Spring Security拿到默认的SecurityContextRepository对象。 debug发现this.securityContextRepository属性指向了 DelegatingSecurityContextRepository这是委派代理存储代理的对象是 RequestAttributeSecurityContextRepository和 HttpSessionSecurityContextRepository所以在默认的情况下用户登录成功之后在这里就把登录用户数据分别存入到HttpSessionSecurityContextRepository和RequestAttributeSecurityContextRepository中。 部分DelegatingSecurityContextRepository源码如下 2.3.3 手动设置SecurityContextRepository对象 为了顺利拿到SecurityContextRepository对象我们可以手动往Spring容器注册一个SecurityContextRepository对象然后把它塞到Spring Security里。通过这种方式我们能从Spring容器拿到SecurityContextRepository 对象然后随时刷新SecurityContext。 具体实现代码如下 Bean public SecurityContextRepository securityContextRepository() {return new DelegatingSecurityContextRepository(new RequestAttributeSecurityContextRepository(), new HttpSessionSecurityContextRepository()); }Bean public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity, SecurityContextRepository securityContextRepository) throws Exception {httpSecurity.securityContext((context) - context.securityContextRepository(securityContextRepository())); }这里DelegatingSecurityContextRepository是Spring Security中的SecurityContextRepository默认实现我们原封不动保留下来。 2.3.4 更新登录态 在更新完SecurityContextHolderStrategy 对象之后我们显式把SecurityContext重新保存到SecurityContextRepository。 // 更新SecurityContextHolderStrategy Authentication authentication SecurityContextHolder.getContext().getAuthentication(); MyUser myUser (MyUser) authentication.getPrincipal(); myUser.setNickname(新的昵称);// 更新SecurityContextRepository securityContextRepository.saveContext(SecurityContextHolder.getContext(), request, response);三、总结 通过显式更新SecurityContextHolderStrategy、SecurityContextRepository 我们就能完整更新SecurityContext 中的用户信息。如果项目中引入了Spring SessionSpring Session维护的登录态也会同步更新。
http://www.hkea.cn/news/14459652/

相关文章:

  • 海拉尔北京网站建设网站建设4038gzs
  • 一个网站的页头大概做多大网站建设工资高吗
  • 公司网站seo优化的二手闲置平台网站怎么做
  • 南阳网站wordpress好还是discuz
  • 做网站群最佳的网络营销策划是
  • 珠海网站建设维护公司企业网站建设需要哪些
  • 内销网站怎么做保定模板建站哪家好
  • 网站开发需要python 吗互联网门户网站建设管理 总结
  • 江苏网站建设找拉米拉眼科医院网站优化服务商
  • 学会网站建设目的饰品做国际贸易哪些网站
  • 沈阳制作网站长沙网站公司哪家好
  • 如何做好网站seo优化网站域名已经解析但没有被百度等搜索引擎收录怎么办
  • 网站360自然排名要怎么做内容管理系统有哪些
  • 西安网站建设那家伙网页视频怎么下载到本地手机
  • 香蜜湖附近网站建设西宁做网站君博先进
  • 网站建设方案书2000字关键词优化是什么
  • 网站策划方案书的内容上海网络营销推广服务
  • 网站开发报价合同h5开发入门
  • 青岛网站建设方案维护高端视觉网站
  • 湛江网站公司做网站的服务器用什么 系统好
  • 筋郑州做网站wordpress公式 插件
  • 淘宝网站建设可行性分析报告哈尔滨网站建设代理商
  • 哪家建站公司好企业名字查询是否注册
  • 网站建设word文档人力资源外包服务包括哪些
  • 网站漏洞扫描工具如何更换网站模板
  • 广东省建设合同备案网站大人和孩做爰网站
  • 本科毕业 做网站编辑做网站运营有前途么
  • 德阳如何做百度的网站深圳品牌营销型网站建设
  • 佛山网站seo哪家好网站搭建与网站建设
  • 杭州市建设工程交易中心网站wordpress entrance 1.2