Spring Securityでセッションを有効にしてセッションタイムアウトを設定する方法 質問する

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

使用している場合Java 構成XML を使用したくない場合は、 を作成してHttpSessionListenerを使用しgetSession().setMaxInactiveInterval()、 で にInitializerリスナーを追加しますonStartup()

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());
}

おすすめ記事