260.Spring Boot+Spring Security:设置登录过期时间的正确姿势
Posted SpringBoot
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了260.Spring Boot+Spring Security:设置登录过期时间的正确姿势相关的知识,希望对你有一定的参考价值。
说明
(1)JDK版本:1.8
(2)Spring Boot 2.0.6
(3)Spring Security 5.0.9
(4)Spring Data JPA 2.0.11.RELEASE
(5)hibernate5.2.17.Final
(6)mysqlDriver 5.1.47
(7)MySQL 8.0.12
需求缘起
博主回复:spring boot2.x的版本的话,设置属性:server.servlet.session.timeout=60;1.x的版本的话,设置属性:server.session.timeout=60;注意时间单位是秒;特别注意的地方:如果设置小于60秒的话,则会默认取1分钟!
对方回复:感谢您的回复,我就是如此设置的,但是似乎没用,所以想问一下是不是有其他方法
那这是为什么呢?这就是本偏博客要解决的问题。
一、设置session的超时时间
设置session的超时时间还是很简单的,直接在application.properties进行配置即可,当然需要注意SpringBoot的版本:
Spring Boot 1.x配置如下:
server.session.timeout=60
注意时间单位是秒;特别注意的地方:如果设置小于60秒的话,则会默认取1分钟!
Spring Boot 2.x配置如下:
server.servlet.session.timeout=60
注意时间单位是秒;特别注意的地方:如果设置小于60秒的话,则会默认取1分钟!
如果设置了这个超时时间,但是到了时间并没有退出登录的话,那么接着往下看吧。
二、设置cookie的超时时间
当配置了“记住我“之后,session超时之后,如果remember-me的cookie并没有超时的话,还是会自动登录的,所以此时就需要正确的配置remember-me的超时时间了。
当使用简单加密token的方式,使用TokenBasedRememberMeServices进行配置:
tokenBasedRememberMeServices.setTokenValiditySeconds(60);
当使用持久化token的方式,在rememberMe()之后进行配置
.and().rememberMe().tokenValiditySeconds(60)
三、题外话:为什么session设置了小于60秒会取1分钟?
我们找到这么一个类
TomcatServletWebServerFactory,里面有一个配置session的方法:
private void configureSession(Context context) {
long sessionTimeout = getSessionTimeoutInMinutes();
context.setSessionTimeout((int) sessionTimeout);
Boolean httpOnly = getSession().getCookie().getHttpOnly();
if (httpOnly != null) {
context.setUseHttpOnly(httpOnly);
}
if (getSession().isPersistent()) {
Manager manager = context.getManager();
if (manager == null) {
manager = new StandardManager();
context.setManager(manager);
}
configurePersistSession(manager);
}
else {
context.addLifecycleListener(new DisablePersistSessionListener());
}
}
这里调用了方法:
getSessionTimeoutInMinutes():
private long getSessionTimeoutInMinutes() {
Duration sessionTimeout = getSession().getTimeout();
if (isZeroOrLess(sessionTimeout)) {
return 0;
}
return Math.max(sessionTimeout.toMinutes(), 1);
}
这里看最后return的代码,就是如果设置的超时时间小于1分钟的话,那么就取1分钟。
历史文章
我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。
à悟空学院:http://t.cn/Rg3fKJD
学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!
SpringBoot视频:http://t.cn/R3QepWG
Spring Cloud视频:http://t.cn/R3QeRZc
SpringBoot Shiro视频:http://t.cn/R3QDMbh
SpringBoot交流平台:http://t.cn/R3QDhU0
SpringData和JPA视频:http://t.cn/R1pSojf
SpringSecurity5.0视频:http://t.cn/EwlLjHh
Sharding-JDBC分库分表实战:http://t.cn/E4lpD6e
以上是关于260.Spring Boot+Spring Security:设置登录过期时间的正确姿势的主要内容,如果未能解决你的问题,请参考以下文章
Spring boot??????????????????Spring boot??????MySql,Mybatis???PageHelper??????