当您可以使用基于Java的配置开发Spring应用程序时,我们生活在一个美好的时光。 不再有多余的XML代码,只有纯Java代码。 在本文中,我想讨论一个关于Spring应用程序中会话管理的热门话题。 更确切地说,我将以Java配置样式讨论会话超时。
因此,在我以前的一篇博客文章中,我已经说过如何管理会话的生命周期。 但是该解决方案意味着使用了web.xml文件,这对于基于Java的配置不是必需的。 因为它的作用是扩展AbstractAnnotationConfigDispatcherServletInitializer类的类。 通常看起来像这样:
import javax.servlet.Filter;import org.springframework.web.filter.HiddenHttpMethodFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;public class Initializer extends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {return null;}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class<?>[] { WebAppConfig.class };}@Overrideprotected String[] getServletMappings() {return new String[] { "/" };}@Overrideprotected Filter[] getServletFilters() {return new Filter[] { new HiddenHttpMethodFilter() };}}
我已经写了很多有关这种配置用法的文章,但是在这里我们应该特别注意AbstractAnnotationConfigDispatcherServletInitializer扩展的类。 我谈论AbstractDispatcherServletInitializer类。 它具有onStartup(ServletContext servletContext)方法。 其目的是使用初始化此Web应用程序所需的任何Servlet,过滤器,侦听器上下文参数和属性来配置ServletContext 。
直接在这个地方,是回顾HttpSessionListener接口的好时机。 正如您已经在此接口的实现中猜到的那样,我们能够在应用程序中管理每个刚创建的会话。 例如,我们可以将最大非活动间隔设置为等于5分钟:
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;public class SessionListener implements HttpSessionListener {@Overridepublic void sessionCreated(HttpSessionEvent event) {System.out.println("==== Session is created ====");event.getSession().setMaxInactiveInterval(5*60);}@Overridepublic void sessionDestroyed(HttpSessionEvent event) {System.out.println("==== Session is destroyed ====");}
}
为了将此会话管理更改应用到基于Java的配置中,我们必须向Initializer类添加以下代码片段:
...@Overridepublic void onStartup(ServletContext servletContext) throws ServletException {super.onStartup(servletContext);servletContext.addListener(new SessionListener());}
...
这就是所有的Java怪胎,喜欢编码。
翻译自: https://www.javacodegeeks.com/2014/05/spring-java-configuration-session-timeout.html