如何在Spring Security中启用会话并设置会话超时

我是Spring Security的新手,我正在研究登录,注销和会话超时功能。我通过参考本文档配置了我的代码。我的代码如下所示:

@Override
protected void configure(HttpSecurity http) throws Exception {

    http.authorizeRequests().antMatchers("/admin/**")
        .access("hasRole('ROLE_USER')").and().formLogin()
        .loginPage("/login").failureUrl("/login?error")
            .usernameParameter("username")
            .passwordParameter("password")
            .and().logout().logoutSuccessUrl("/login?logout").and().csrf();
    http.sessionManagement().maximumSessions(1).expiredUrl("/login?expired");
}

重写类 AbstractSecurityWebApplicationInitializer

import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;

public class SpringSecurityInitializer extends AbstractSecurityWebApplicationInitializer {

    @Override
    public boolean enableHttpSessionEventPublisher() {
        return true;
    }

}

我需要澄清我是否正确,如果它看起来不错,那么我需要在哪里设置会话超时。我完全基于注释来做。


答案 1

如果您使用的是JavaConfig并且不想使用XML,则可以创建一个并使用,然后在中添加侦听器:HttpSessionListenergetSession().setMaxInactiveInterval()InitializeronStartup()

public class SessionListener implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent event) {
        System.out.println("session created");
        event.getSession().setMaxInactiveInterval(15);
    }

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

然后在初始值设定项中:

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

答案 2

我能够通过在web.xml中添加下面的配置来解决上述问题。任何更好的方法都会被接受。

 <session-config>
    <session-timeout>20</session-timeout>
</session-config>

推荐