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日

相关文章

  • Community Server专题一:概述Community Server

    Community Server专题一:概述Community Server Community Server是一个开放源代码的社区论坛系统,可以让任何人轻松地创建和管理一个社区论坛网站。它的核心功能包括讨论区、文章列表、个人资料、私人消息、通知、标签和分类等。在这篇文章中,我们将会详细讲解Community Server的功能和用途,以及如何创建和配置一个…

    database 2023年5月21日
    00
  • PHP编译安装中遇到的两个错误和解决方法

    下面是“PHP编译安装中遇到的两个错误和解决方法”的完整攻略。 背景描述 在使用 PHP 进行开发时,有时候需要进行编译安装。但是,在这个过程中,可能会遇到一些错误。本文将针对其中比较常见的两个错误进行分析,并给出解决方案。 错误一:configure: error: Cannot find OpenSSL’s libraries 在编译 PHP 时,执行 …

    database 2023年5月22日
    00
  • redis集群和哨兵的区别

    监控主数据库和从数据库是否正常运行。 主数据库出现故障时自动将从数据库转换为主数据库。 sentinel发现master挂了后,就会从slave中重新选举一个master。 哨兵模式强调高可用 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: 监控(Monitoring): Sentinel 会不断地检查…

    Redis 2023年4月11日
    00
  • Linux下Redis设置密码及开机自启动

    下面给出详细的“Linux下Redis设置密码及开机自启动”的攻略。 1. 设置密码 1.1 准备工作 首先,在你的Linux系统上安装好了Redis,并已经正常启动。如果还未安装,可以通过以下命令进行安装: sudo apt-get update sudo apt-get install redis-server 为了方便,我们假设Redis安装在默认目录…

    database 2023年5月22日
    00
  • Yii快速入门经典教程

    Yii快速入门经典教程攻略 1. 安装Yii框架 在使用Yii框架进行开发之前,你需要先安装好Yii框架。Yii的安装分为两种方式,一种是直接下载安装包安装,另一种是使用Composer管理Yii项目的依赖。 1.1 直接下载安装包安装 步骤1: 官网下载Yii框架,并解压到本地。 步骤2: 配置Web服务器,将Yii框架中的demo目录配置为网站的根目录。…

    database 2023年5月21日
    00
  • MySQL配置参数优化

    mysql服务性能优化之my.cnf配置说明详解 硬件:内存16G   #在MYSQL暂时停止响应新请求之前,短时间内的多少个请求可以被存在堆栈中。如果系统在短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的监听队列的大小。默认值50。   max_connections = 2000    #MySQL允许最大的进程连接数,如果…

    MySQL 2023年4月13日
    00
  • SQL Server时间戳功能与用法详解

    SQL Server时间戳功能与用法详解 在 SQL Server 中,时间戳是一种数据类型,用于记录数据表中行的改变情况。本文将详细介绍时间戳的概念、语法和用法。 什么是时间戳? 时间戳(timestamp)是一种用来追踪数据表中行的变化的方法。它可以自动维护每行数据的版本号,并在行发生变化时自动更新版本号。时间戳是一种二进制数据类型,并具有以下特性: 每…

    database 2023年5月22日
    00
  • 主键和唯一键的区别

    主键和唯一键都是关系数据库中常见的概念,它们在表的设计和数据的操作中都起到了重要作用。虽然它们都用于标识数据库表中的某行记录,但是它们在实现和使用上还是有很多区别的。 1. 主键 主键就是一个表中的唯一标识符,它能够唯一确定一条记录。一个表中只有一个主键,主键的值不能为 NULL 值。通常情况下,主键由一个或多个列组成,这些列的值必须在一定范围内唯一,以此来…

    database 2023年3月27日
    00
合作推广
合作推广
分享本页
返回顶部