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