HttpSessionListener不起作用

时间:2015-09-23 12:43:22

标签: java spring spring-mvc servlets spring-boot

我已经实现了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");
    }
}

2 个答案:

答案 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);
    }
}

来源:https://www.baeldung.com/spring-security-session