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

好网站页面/百度爱采购优化软件

好网站页面,百度爱采购优化软件,群晖 做网站 Java,杭州哪些做网站公司好文章目录1 概述2 原因3 解决方案4 方案实现1 概述 该篇基于《SpringSecurity in Action》三:Session并发控制问题 & 《SpringSecurity in Action》二: 基于redis实现session共享 在【《SpringSecurity in Action》三:Session并发控制问题…

文章目录

    • 1 概述
    • 2 原因
    • 3 解决方案
    • 4 方案实现

1 概述

该篇基于《SpringSecurity in Action》三:Session并发控制问题 & 《SpringSecurity in Action》二: 基于redis实现session共享
在【《SpringSecurity in Action》三:Session并发控制问题】最后做测试时,刻意回避了一个问题,就是不要在多副本情况下进行测试,因为以上一篇的配置来说,还不支持在session共享下完成session并发控制。

2 原因

这里要骚骚的涉及一些源码:

  • session并发控制是在org.springframework.security.web.authentication.session.ConcurrentSessionControlAuthenticationStrategy类中实现的
  • 这个类依赖了一个接口叫org.springframework.security.core.session.SessionRegistry,该接口的默认实现是org.springframework.security.core.session.SessionRegistryImpl
  • 该实现类维护了一个注册表,记录某一帐号进行的登陆信息:org.springframework.security.core.session.SessionRegistryImpl#principals,该注册表是一个map集合,注册表map的key是用户信息,即principal对象,value是sessionId的set集合
  • 当进行登陆操作时,SpringSecurity会检查这个map集合中某一用户对应的set集合长度有没有过超过maximumSessions,如果已经超过了,就会执行并发策略。
  • 最后,org.springframework.security.core.session.SessionRegistryImpl这个实现类不是多副本共享的,是某个副本自己维护的

由于以上几个方面的原因,Session并发在多副本情况下是不生效的,除非每个副本都达到了我们配置的maximumSessions,这时Session并发才会生效,但此时我们已经登陆了maximumSessions * 副本数 次,很明显并不满足需求嘛。

3 解决方案

既然问题出现在org.springframework.security.core.session.SessionRegistryImpl这个实现类上,那我们就给org.springframework.security.core.session.SessionRegistry接口换个实现类。

SpringSession给org.springframework.security.core.session.SessionRegistry提供了一个实现类,叫org.springframework.session.security.SpringSessionBackedSessionRegistry,该实现类依赖了一个Repository对象叫org.springframework.session.data.redis.RedisIndexedSessionRepository,看名子可以猜到,现在去判断某一个帐号登陆了几次的时候,是通过redis中的共享session去完成的,这时在多副本情况下,就能准确地知道某一用户到底进行了几次登陆了。

4 方案实现

这里又一次感受到了Spring的强大,这里也只需要几行代码就可以了。
在SpringSecurity配置类里引入依赖,并配置到HttpSecurity里就OKAY了。

主要依赖

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.0.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId></dependency></dependencies>

配置文件

spring:redis:host: 256.73.82.27 # 地址,这个ip是瞎写的,第一位是256就不可能的对吧port: 6379 # 端口database: 1 # 数据库索引password: redissession:store-type: redis

SpringSecurity配置类

@Autowiredprivate FindByIndexNameSessionRepository sessionRepository;@Bean(name = "springSessionBackedSessionRegistry")public SessionRegistry sessionRegistry() {return new SpringSessionBackedSessionRegistry(sessionRepository);}/*** 这个Bean的作业是在登出时,进行一个发布,具体做了什么还不是很清楚* 如果没有该Bean,现象是如果配置了http.maxSessionsPreventsLogin(true),当用户登陆数量后,即使进行登出操作,接下来也还是不能正常登陆。*/@Beanpublic HttpSessionEventPublisher httpSessionEventPublisher() {return new HttpSessionEventPublisher();}@Overrideprotected void configure(HttpSecurity http) throws Exception {http/** 省力其它配置信息*/.sessionManagement().maximumSessions(2).sessionRegistry(sessionRegistry())/** 省力其它配置信息*/

将sessionRegistry配置为我们自己定义的SpringSessionBackedSessionRegistry。这时进行测试

  • 在本机启两个端口的服务,一个端口是8765,一个端口是8766.
  • 登陆请求A,向8765服务发起登陆请求。
  • 登陆请求B,向8766服务发起登陆请求。
  • 登陆请求C,再一次向8766服务发起登陆请求。
  • 使用第一次登陆请求返回的session请求业务接口,发现认证失败,说明并发控制生效。
http://www.jmfq.cn/news/5049253.html

相关文章:

  • 网站开发的背景是指什么/seo查询官方网站
  • steam网站代做/长沙互联网网站建设
  • 网站开发环境及工具/教育培训排行榜前十名
  • 那家网站做照片书好/郑州厉害的seo优化顾问
  • 怎么做本地网站/一个新产品策划方案
  • 手机百度网址大全/seo关键字优化技巧
  • 山东天成水利建设 网站/国内可访问的海外网站和应用
  • 德州宁津网站建设/高明公司搜索seo
  • 浙江华企 做网站怎么样/免费推广的渠道有哪些
  • 网站搭建注意事项/怎么在百度上推广自己的产品
  • 免费素材网站排行榜/网站推广的基本方法有哪些
  • 谷歌账号注册网站打不开/seo图片优化
  • 网站群建设指导意见/微信群推广网站
  • 做视频网站可行吗/英文seo
  • 北京住房和城乡建设委员会网站6/军事新闻最新消息
  • 招聘类网站如何做/引流软件下载站
  • 网站开发前端要学什么/营销网站定制公司
  • wordpress中文网站/网络营销有哪些推广方式
  • 广州 餐饮 网站建设/百度推广方案怎么写
  • wordpress博客用域名/seo实战视频
  • 临西做网站哪里便宜/湖北最新消息
  • 门户网站建设 简报/优化大师官网
  • 上海建站网站/百度搜索引擎下载
  • 手工制作大全教程/无锡seo网络推广
  • 网站建设q a/公司优化是什么意思?
  • 网站建设运营策划书/网站推广软件免费观看
  • 做外贸网站那个好/专业网络推广机构
  • 网站建设方案的含义/快速排名软件案例
  • 天津网站建设网站建设/北京seo经理
  • 南宁网站建设平台/如何进行新产品的推广