如何在java spring boot / spring security(HttpSecurity)中会话到期时自动注销

时间:2016-07-08 18:59:19

标签: java spring spring-security spring-boot

通过自动注销,我的意思是当会话到期时,浏览器将被重定向到注销网址,而用户无需点击任何链接,无论如何都会将他重定向到注销网址。

这是我的SecurityConfig:

  

import org.springframework.beans.factory.annotation.Autowired;进口   org.springframework.boot.autoconfigure.security.SecurityProperties;   import org.springframework.context.annotation.Bean;进口   org.springframework.context.annotation.Configuration;进口   org.springframework.core.annotation.Order;进口   org.springframework.security.access.vote.RoleVoter;进口   org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;   进口   org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;   进口   org.springframework.security.config.annotation.web.builders.HttpSecurity;   进口   org.springframework.security.config.annotation.web.builders.WebSecurity;   进口   org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;   进口   org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;   import org.springframework.security.config.http.SessionCreationPolicy;

     

/ ** * 2016年5月5日由柏拉图创建。 * / @Configuration   @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true)   @Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)公共类   SecurityConfig扩展了WebSecurityConfigurerAdapter {

@Autowired
DatabaseAuthenticationProvider authenticationProvider;

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/js/**", "/css/**", "/img/**", "/templates/**", "/thymeleaf/**");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.formLogin()
            .loginPage("/login")
            .failureUrl("/login?failed=true")
            .defaultSuccessUrl("/login-success")
            .and().logout()
            .logoutSuccessUrl("/")
            .and().authorizeRequests()
            .antMatchers("/admin**", "/api/admin/**").hasAuthority("ADMIN")
            .antMatchers("/**")
            .permitAll()
            .anyRequest().authenticated()
            .and().csrf().disable()
            .sessionManagement()
            .maximumSessions(1)
            .expiredUrl("/login?expired-session")
            .and()
            .invalidSessionUrl("/?invalid-session");
}

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth.authenticationProvider(authenticationProvider).eraseCredentials(true);
} }

1 个答案:

答案 0 :(得分:0)

客户必须进行投票。服务器无法“推送”重定向。

客户端可以每X个时间轮询一次,其中X比会话超时略长。如果轮询更频繁,那么它将刷新会话,因此永远不会超时。客户端可以在每次用户交互时重置计时器。