首页 > 其他分享 >Spring Security区分session失效与踢出登录策略

Spring Security区分session失效与踢出登录策略

时间:2023-12-27 10:35:26浏览次数:28  
标签:策略 登录 Spring 配置 session 失效 Security response

 

两种场景简单说明

session失效:正常session过期,需要提示用户登录过期等提示,跳回登录页,让用户重新登录。
踢出登录:系统只允许设备单一登录,一旦账号在另一个设备如浏览器登录了,则前一个登录账号会被踢出,同时给用户一个账号在另一个地方登录,防止密码泄漏等友好提示。

session失效策略实现

在Security的配置文件中, configure(HttpSecurity http) 方法里,构建时增加上session管理配置,同时配置无效session策略,配置参考如下:

.and().sessionManagement()
.invalidSessionStrategy(invalidSessionStrategy)

其中无效session的策略类需要实现InvalidSessionStrategy接口,参考如下:

@Component
public class TestInvalidSessionStrategy implements InvalidSessionStrategy {
@Override
public void onInvalidSessionDetected(HttpServletRequest httpServletRequest, HttpServletResponse response) throws IOException, ServletException {
response.setStatus(HttpStatus.HTTP_UNAUTHORIZED);
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("当前登录已失效!请重新登录");
}
}

即可实现在session正常失效时,提示用户:“当前登录已失效!请重新登录”。

登录踢出的策略实现

在Security的配置文件中, configure(HttpSecurity http) 方法里,构建时增加上session管理配置,同时配置过期session策略,在上述的配置前提下,再新增配置项,配置参考如下:

.and().sessionManagement()
.invalidSessionStrategy(invalidSessionStrategy)
//配置session最大数量,设置为1,就只允许一个用户登录,就能够实现提出功能了
.maximumSessions(1)
//配置session过期策略
.expiredSessionStrategy(sessionExpiredStrategy)

其中过期session的策略类需要实现SessionInformationExpiredStrategy接口,参考如下:

@Component
public class TestSessionExpiredStrategy implements SessionInformationExpiredStrategy {


@Override
public void onExpiredSessionDetected(SessionInformationExpiredEvent sessionInformationExpiredEvent) throws IOException {
HttpServletResponse response = sessionInformationExpiredEvent.getResponse();
response.setStatus(HttpStatus.HTTP_UNAUTHORIZED);
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("您的账号已经在别的地方登录!");
}
}

即可实现在登录踢出时,提示用户:“您的账号已经在别的地方登录!”。
————————————————
版权声明:本文为CSDN博主「绅士jiejie」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_38106322/article/details/123949129

 

标签:策略,登录,Spring,配置,session,失效,Security,response
From: https://www.cnblogs.com/softidea/p/17929979.html

相关文章

  • SpringBoot自动配置原理
    通过@SpringBootConfiguration引入了@EnableAutoConfiguration(负责启动自动配置功能)@EnableAutoConfiguration引入了@Import注解Spring容器启动时:加载Ioc容器时会解析@Import注解@Import导入了一个deferredImportSelector,会使SpringBoot的自动配置类的顺序再最后,这样方便......
  • 一些基于SpringBoot2.X的后台管理系统,可以作为高校毕设项目、个人学习之用
    该酒店管理系统适用于各类酒店管理,用于提高酒店内部工作效率。主要是针对酒店内部工作人员即管理员和酒店普通员工设计的。主要是具备客房预订、退房、房间信息管理、员工管理、入住管理等模块,提高了酒店内部业务的运转效率,大大降低了成本;该系统基于SpringBoot+VUE+MyBatisPlus......
  • Spring系列:基于Spring-Jdbc实现事务
    目录一、事务基本概念二、编程式事务三、声明式事务前期准备四、基于注解的声明式事务@Transactional注解标识的位置事务属性:只读事务属性:超时事务属性:回滚策略事务属性:隔离级别事务属性:传播行为测试五、基于XML的声明式事务一、事务基本概念①什么是事务数据库事务(transacti......
  • SpringBoot的编码方式
     方式1.使用配置文件的方式对字符进行编码1.第一种方式:在配置文件中(properties或者yaml文件中均可)添加:server.servlet.encoding.enable=true但是现如今的许多程序已经弃用了这种写法2.第二种方式:server.servlet.encoding.charset=UTF-8;server.servlet.encoding.force=......
  • SpringCloud与Dubbo的区别(九)
    前言参看链接:https://blog.csdn.net/huangtenglong/article/details/131144602一、SpringCloud与Dubbo的区别初始定位不同:SpringCloud定位为微服务架构下的一站式解决方案;Dubbo是SOA时代的产物,它的关注点主要在于服务的调用和治理生态环境不同:SpringCloud依托于Spring平台,具......
  • Spring Boot学习随笔- RestFul API(@RestController、@RequestBody、@PathVariable),使用
    学习视频:【编程不良人】2021年SpringBoot最新最全教程第十六章、RestFulAPI什么是RESTREST全称是ResourceRepresentationalStateTransfer,中文意思是表述性状态转移,它首次出现在2000年RoyFielding的博士论文中,RoyFielding是HTTP规范的主要编写者之一。他在论文中表......
  • Spring boot 三层应用分层
    作者:小知链接:https://www.zhihu.com/question/472016678/answer/2000694421来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。说起应用分层,大部分人都会认为这个不是很简单嘛就controller,service,mapper三层。看起来简单,很多人其实并没有把他们职责划......
  • Spring事务@Transaction失效原因
    目录1、数据库引擎不支持事务2、事务管理器配置问题3、没有被SpringIOC管理4、非public方法5、内部方法调用(常见)6、异常被捕获(常见)7、非受检异常(常见)1、数据库引擎不支持事务某些数据库引擎不支持事务,如果你使用这些引擎,则不能正确地使用@Transactional注解。2、事务管理器配......
  • Spring应用最常用的工具类汇总
    文件资源访问假设有一个文件地址位于Web应用的类路径下,您可以通过以下方式对这个文件资源进行访问:FileSystemResource以文件系统绝对路径的方式进行访问;ClassPathResource以类路径的方式进行访问;ServletContextResource以相对于Web应用根目录的方式进行访问。Resourc......
  • 浅聊springboot的启动流程
    前言本文会对Springboot启动流程进行详细分析。但是请注意,Springboot启动流程是Springboot的逻辑,请千万不要将Springboot启动流程相关逻辑与Spring的相关逻辑混在一起,比如把Spring的bean生命周期的逻辑混在Springboot启动流程中,那么整个体系就复杂且混乱了。所以本文仅重点关注Spri......