Spring Java 配置之 Session 超时 已翻译 100%

oschina 投递于 2014/05/14 07:04 (共 2 段, 翻译完成于 05-14)
阅读 17673
收藏 118
5
加载中

我们生活在一个美好的时代,在这个时代你可以使用基于java的配置来开发一个Spring应用程序. 再也没有多余的XML代码了,只有纯正的java代码. 本文中我想要讨论一下关于Spring应用程序中的session管理这里流行主题. 更确切的目的是我将会说说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 {

	@Override
	protected Class<?>[] getRootConfigClasses() {
		return null;
	}

	@Override
	protected Class<?>[] getServletConfigClasses() {
		return new Class<?>[] { WebAppConfig.class };
	}

	@Override
	protected String[] getServletMappings() {
		return new String[] { "/" };
	}

	@Override
	protected Filter[] getServletFilters() {
		return new Filter[] { new HiddenHttpMethodFilter() };
	}

}
LeoXu
翻译于 2014/05/14 07:28
1

我已经写过很多有关使用 这种配置 的东西, 而这里我们应该给那些 AbstractAnnotationConfigDispatcherServletInitializer 扩展的类以更多的关注. 我讲的是 AbstractDispatcherServletInitializer 类. 在它那里它拥有 onStartup(ServletContext servletContext) 方法. 其目的是配置一个带有任何用于初始化一个web应用程序的servlet、filter、listener、context-param以及attribute这些东西的ServletContext.

直接在这里回想起HttpSessionListener接口是一个很好的时机. 由于你已经猜到了这个接口的一个实现,只要在一个应用程序中创建一个Listener,就能管理每一个会话了. 例如,我们可以将最大的非活动时间设置为5分钟:

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

public class SessionListener implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent event) {
        System.out.println("==== Session is created ====");
        event.getSession().setMaxInactiveInterval(5*60);
    }

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

为了将这一会话管理上的变化应用于我们基于java的配置中,我们要将下面的代码片段加入Initializer类中:

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

就是这些了,所有的java极客们,祝你们编码愉快.

LeoXu
翻译于 2014/05/14 07:39
5
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(10)

qwfys
qwfys
不错,
manneting
manneting

引用来自“归零膏灬”的评论

学习了
:bowtie:😄
IT小何
IT小何
受益了
归零膏灬
归零膏灬
学习了
寒武纪
寒武纪
SessionListener不宜存储管理太多内容,移到集中式缓存中心比较合理
龙上
龙上
这没有IDE自动。调试出错都要半天时间。
高跟男爵
高跟男爵
这不是一般的长···
长宁楚王陈涉
长宁楚王陈涉

引用来自“阿信sxq”的评论

这个类的名字真长
我也觉得很长
阿信sxq
阿信sxq
这个类的名字真长
h
hjhjsword
该死的超时。
返回顶部
顶部