春季/安全中的自定义会话超时

Posted

技术标签:

【中文标题】春季/安全中的自定义会话超时【英文标题】:customized session timeout in spring/security 【发布时间】:2017-03-05 23:20:22 【问题描述】:

如何在春季自定义会话超时.. 会话超时参数/输入在 web.xml 中设置为 15 分钟。 它工作正常.. 我想在此会话超时发生之前执行几行,并且应该能够决定是否继续进行会话超时.. 这意味着.. 我想检查会话中的一些参数,然后希望有选择地为某些用户进行会话超时(即在 15 分钟不活动后),而其他用户则永远不会发生此超时。

【问题讨论】:

【参考方案1】:

使用 HttpSessionListener

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class SessionListener implements HttpSessionListener 

    @Override
    public void sessionCreated(HttpSessionEvent event) 
        // ..   event.getSession().getAttribute("xxxx")
        event.getSession().setMaxInactiveInterval(5*60);
    

    @Override
    public void sessionDestroyed(HttpSessionEvent event) 
        System.out.println("==== Session is destroyed ====");
    

在 web.xml 中注册

<web-app ...>
    <listener>
        <listener-class>yourpackage.SessionListener</listener-class>
    </listener>
</web-app>

或在您的应用程序初始化程序中

public class AppInitializer implements WebApplicationInitializer 

//...
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException 
        super.onStartup(servletContext);
        servletContext.addListener(new SessionListener());
    
//...


【讨论】:

谢谢..我需要在会话因会话超时而被破坏之前自定义间隔(setMaxInactiveInterval)..而不是在创建时或销毁之后..有类似的吗? 另外,如果我没有设置 setMaxInactiveInterval(5*60) 那么会遵循 web.xml 中的默认超时时间(即 15 分钟)吗? @adarshabv 然后你可以使用拦截器***.com/a/12084748/410677

以上是关于春季/安全中的自定义会话超时的主要内容,如果未能解决你的问题,请参考以下文章

春季安全会话超时

Tomcat 7/JBoss7 的自定义会话 ID 生成器

春季内部异常的自定义json响应

春季安全4中的用户名null

春季安全。自定义身份验证管理器

在春季安全中注销特定会话ID