使用Spring的@EnableRedisHttpSession时,如何在控制器中获取session或redis key的过期时间?

How to get session or redis key's expiration time in controller when using Spring's @EnableRedisHttpSession?

我正在使用 Spring 引导和 Spring 会话。这是我的简单配置。

@EnableRedisHttpSession
public class Config {}

Spring 默认情况下启动创建一个 RedisConnectionFactory 并且我将相应的 host, port 信息等放入 application.yml 文件中(为简洁起见删除)

我还添加了与安全相关的信息(为简洁起见将其从此处删除)。

现在这是我的控制器。

@RestController
public HomeController {

    @GetMapping("/hello")
    public String home(HttpSession session){
        // I need redis's key's expiration time. or session id's expiration time. 
        // how can I get this? Should I use HttpSession?
        return "hello";
    }

}

如何在控制器中获取会话过期时间?或者更确切地说,我怎样才能得到 redis 的密钥的过期时间?

您需要使用HttpSession

您可以将其作为参数添加到您的控制器方法中,如下所示(也显示在问题中)。

@GetMapping("/hello")
public String home(HttpSession session){
    // I need redis's key's expiration time. or session id's expiration time. 
    // how can I get this? Should I use HttpSession?
    int ttl = session.getMaxInactiveInterval(); // this should give redis TTL
    return "hello";
}

并且可以使用HttpSession的getMaxInactiveInterval方法获取redis的TTL值,如上代码所示