我已经实现了HttpSessionListiner,但它不起作用。 使用debuger检查 - 在进入servlet后创建新会话,登录后JSESSION_ID发生变化,但session.getCreateTime()保持不变(会话保持不变?)。 使用注释,Spring Security。也许我在春季安检中错过了一些配置?
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.apache.log4j.Logger;
@WebListener
public class SessionListener implements HttpSessionListener {
private static int totalActiveSessions;
private static final Logger log = Logger.getLogger(SessionListener.class);
@Override
public void sessionCreated(HttpSessionEvent se) {
totalActiveSessions++;
log.warn("sessionCreated - add one session into counter");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
totalActiveSessions--;
log.debug("sessionDestroyed - deleted one session from counter");
}
}
答案 0 :(得分:3)
@Bean
public ServletListenerRegistrationBean<HttpSessionListener> sessionListener() {
return new ServletListenerRegistrationBean<HttpSessionListener>(new sessionListener());
}
这个豆注册了我的听众。我还没有找到另一个解决方案。
答案 1 :(得分:0)
虽然不是发布者的特定问题,但另一个问题是实际上并未创建会话,这意味着您的听众理所当然不会被触发。如果使用Spring Security,则默认的会话创建策略为SessionCreationPolicy.IF_REQUIRED。
您可以根据需要在网络安全Java配置中更改此设置:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{
protected void configure(HttpSecurity http) throws Exception {
http.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.ALWAYS);
}
}