下面是“Springboot2 session设置超时时间无效的解决”的完整攻略:
问题描述
在Springboot2项目中,我们有时会遇到设置session超时时间无效的问题。即使我们设置了session超时时间,实际上session并没有按照我们设置的时间来进行超时,而是仍然按照默认的时间进行超时。这时候我们需要想办法解决这个问题。下面是解决方法:
方法一:修改application.properties
在application.properties中添加以下配置:
server.session.timeout=3600 # 单位为秒,设置session超时时间
这样做就可以解决session超时时间设置无效的问题了。
方法二:自定义session管理器
如果我们需要更多的session管理选项,比如设置session的存储、序列化方式,那么我们可以自定义session管理器。实现方式如下:
- 实现
org.springframework.session.Session
接口,定义一个类实现该接口,在其中添加session需要的一些属性和方法:
public class MySession implements Session {
private Map<String, Object> map = new HashMap<String, Object>();
private String id;
private Instant creationTime;
private Instant lastAccessedTime;
private Duration maxInactiveInterval;
// ... 省略属性的getter和setter方法,以及其他方法
}
- 实现
org.springframework.session.SessionRepository
接口,定义一个类实现该接口,在其中添加session存储和读取的方法:
public class MySessionRepository implements SessionRepository<MySession> {
@Override
public MySession createSession() {
MySession session = new MySession();
// ... 省略session的创建
return session;
}
@Override
public void save(MySession session) {
// ... 省略session的存储
}
@Override
public MySession findById(String id) {
MySession session = new MySession();
// ... 省略session的读取
return session;
}
// ... 省略其他方法
}
- 配置SessionManagementConfigurerAdapter,使用自定义session管理器
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private SessionRepository<MySession> sessionRepository;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.NEVER)
.sessionFixation().none()
.invalidSessionUrl("/invalidSessionUrl")
.maximumSessions(10)
.maxSessionsPreventsLogin(false)
.sessionRegistry(sessionRegistry())
.sessionRepository(sessionRepository);
}
@Bean
public SessionRegistry sessionRegistry() {
return new SessionRegistryImpl();
}
}
做完以上步骤就实现了自定义session管理器,并在Spring Security的配置中使用了该管理器。
以上是解决“Springboot2 session设置超时时间无效的解决”的攻略,希望对你有帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot2 session设置超时时间无效的解决 - Python技术站