Springboot2 session设置超时时间无效的解决

下面是“Springboot2 session设置超时时间无效的解决”的完整攻略:

问题描述

在Springboot2项目中,我们有时会遇到设置session超时时间无效的问题。即使我们设置了session超时时间,实际上session并没有按照我们设置的时间来进行超时,而是仍然按照默认的时间进行超时。这时候我们需要想办法解决这个问题。下面是解决方法:

方法一:修改application.properties

在application.properties中添加以下配置:

server.session.timeout=3600 # 单位为秒,设置session超时时间

这样做就可以解决session超时时间设置无效的问题了。

方法二:自定义session管理器

如果我们需要更多的session管理选项,比如设置session的存储、序列化方式,那么我们可以自定义session管理器。实现方式如下:

  1. 实现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方法,以及其他方法
}
  1. 实现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;
    }

    // ... 省略其他方法
}
  1. 配置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技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • Linux下MySQL 5.5/5.6的修改字符集编码为UTF8的方法

    要修改MySQL 5.5/5.6的字符集为UTF8,需要执行以下步骤: 1. 查看当前编码信息 登录MySQL并执行以下命令查看当前的编码信息: SHOW VARIABLES LIKE ‘%character%’; SHOW VARIABLES LIKE ‘%collation%’; 其中,第一个命令用于查看字符集编码,第二个命令用于查看排序规则。 2. 修…

    database 2023年5月22日
    00
  • CentOS8部署LNMP环境之编译安装mysql8.0.29的教程详解

    CentOS8部署LNMP环境之编译安装Mysql8.0.29的教程详解 简介 MySQL 是一个流行的关系型数据库管理系统,常用于 Web 应用程序的开发和部署。本教程将向您介绍如何在 CentOS 8 服务器上编译安装 MySQL 8.0.29。 步骤一:安装编译工具 在安装 MySQL 之前,需先安装编译 MySQL 所需的工具和库文件: sudo d…

    database 2023年5月22日
    00
  • Teradata和PouchDB的区别

    我来为您详细讲解Teradata和PouchDB的区别。 Teradata和PouchDB简介 Teradata Teradata是一种关系型数据库管理系统,它可以管理大型企业应用的数据仓库,支持高性能的并发处理和多用户访问。它有多个组件,包括数据库、服务和工具等。作为一种企业级数据库,Teradata具有可扩展性、稳定性、高性能等优势。 PouchDB P…

    database 2023年3月27日
    00
  • SQL Server 公用表表达式(CTE)实现递归的方法

    下面是SQL Server公用表表达式(CTE)实现递归的完整攻略。 什么是公用表表达式(CTE) 公用表表达式(CTE)是一个临时命名的结果集,它定义在一个 SQL 语句内并且能被这个语句后面的其他语句引用。CTE可以看作是一种特殊的临时表,在语法上与普通的SELECT查询有些类似,但CTE比SELECT查询多了很多特性。 为什么要使用公用表表达式(CTE…

    database 2023年5月21日
    00
  • SQL 删除重复项

    当我们在SQL表中有重复记录时,我们可能需要删除这些重复项。以下是一些实用的SQL删除重复项的方法: 方法1:使用DISTINCT 使用SELECT DISTINCT语句选择所有非重复记录,并将它们插入到新表中,然后将旧表重命名并将新表重命名为旧表名称。如下所示: — 将DISTINCT查询结果插入到新表中 SELECT DISTINCT * INTO n…

    database 2023年3月27日
    00
  • 在OracleE数据库的字段上建立索引的方法

    建立索引是优化数据库性能的一种方法,能够快速地定位和访问数据,提高数据检索速度。下面是在Oracle数据库中建立索引的完整攻略。 1. 什么是索引 索引是一种结构化的数据,它能够快速找到满足特定条件的数据。在数据库中,索引可以快速定位到数据记录,并提高数据的读取效率,减少不必要的扫描和排序过程,从而提高了数据库的性能。 2. 建立索引的优点 改善数据的读取效…

    database 2023年5月21日
    00
  • 如何在Python中使用MongoDB数据库?

    以下是在Python中使用MongoDB数据库的完整使用攻略。 使用MongoDB数据库的前提条件 在使用Python连接MongoDB数据库之前,确保已经安装了MongoDB数据库,并已经创建使用数据库和集合,同时需要安Python的驱动程序,例如pymongo。 步骤1:导入模块 在Python中使用pymongo模块连接MongoDB数据库。以下是导入…

    python 2023年5月12日
    00
  • [Redis] 哈希表的Rehash机制

    哈希表的完整结构 , 因为他是多个哈希一层层嵌套的 , 所以会是这样的结构       触发rehash的时机 字典类型容量变化过程叫做rehash,需要满足一定的条件才能触发扩容机制服务器当前没有进行BGWRITEAOF或者BGSAVE命令,且当前键值对个数超过一维数组的大小,才会触发扩容。 如果当前键值对个数超过一维数组大小的五倍,无论是否在进行BGWR…

    Redis 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部