我有一个spring boot (v1.5.9.RELEASE)项目,想要对session进行管理/监听,实现了HttpSessionListener和HttpSessionAttributeListener这两个接口,在MySessionListener中使用@WebListener注解,在启动类中使用@SpringBootApplication注解
但是经过测试,访问网页(ftl页面)无法触发sessionCreated()方法,session过期时也无法触发sessionDestroyed()方法;用户登陆时调用request.getSession().setAttribute()或者session().setAttribute()都无法触发attributeAdded()方法。
程序启动时可以输出构造方法中的内容
2018-01-22 18:02:49.761 INFO 35600 --- [ost-startStop-1] c.t.x.c.listener.MySessionListener : MySessionListenerInitialized
请问有人知道这是为什么吗
代码如下:
DemoApplication.java
@SpringBootApplication
@ServletComponentScan
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
MySessionListener.java
@WebListener
public class MySessionListener implements HttpSessionListener, HttpSessionAttributeListener {
private final static Log log = LogFactory.getLog(MySessionListener.class);
// 程序启动时可以在控制台中输出这句话
public MySessionListener() {
log.info("MySessionListenerInitialized");
}
@Override
public void sessionCreated(HttpSessionEvent se) {
log.info("sessionCreated-----" + se.getSession().getId());
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
log.info("sessionDestroyed-----" + se.getSession().getId());
}
@Override
public void attributeAdded(HttpSessionBindingEvent se) {
log.info("attributeAdded: "+se.getSession().getId());
}
@Override
public void attributeRemoved(HttpSessionBindingEvent se) {
log.info("attributeRemoved: "+se.getSession().getId());
}
@Override
public void attributeReplaced(HttpSessionBindingEvent se) {
log.info("attributeReplaced: "+se.getSession().getId());
}
}
还有就是使用springbean的配置方式同样无效
@Configuration
public class MyWebConfiguration extends WebMvcConfigurerAdapter {
@Bean
public ServletListenerRegistrationBean<EventListener> sessionListener() {
ServletListenerRegistrationBean<EventListener> sessionListener = new ServletListenerRegistrationBean<>();
sessionListener.setListener(new MySessionListener());
return sessionListener;
}
}