拒绝使用已经过身份验证的会话登录

时间:2015-10-22 14:15:07

标签: java spring-security

如何拒绝(已使用相同或不同用户)再次登录已经过身份验证的HTTP会话?

对于Form-Login,我找到了以下解决方法:

但是这些解决办法并不完美,因为我仍然可以访问login-processing-url并执行第二次登录。对于没有登录页面的所有身份验证机制,例如HTTP Basic AuthenticationKerberos

我的Java配置:

@Configuration
@EnableWebSecurity
public static class MyWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {

    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/**").hasAuthority("ROLE_user")
                .and()
            .formLogin()
                .loginProcessingUrl("/Login").permitAll()
                .loginPage("/index.jsp").permitAll()
                .defaultSuccessUrl("start.jsp")
                .failureUrl("/index.jsp")
                .and()
            .httpBasic();
    }
}

示例:

  1. 用户A:使用HTTP基本身份验证登录。
  2. 系统:创建会话并返回会话cookie。
  3. 用户B:在同一台计算机上使用HTTP基本身份验证登录并发送会话cookie。
  4. 系统:创建一个新会话,将旧会话中的所有值合并到新会话中(请参阅SessionFixationProtectionStrategy),销毁旧会话并返回新会话cookie。

1 个答案:

答案 0 :(得分:0)

将以下条目放入web.xml

<listener>
  <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>

并在您的spring安全配置中,使用以下代码段:

<http>
  <session-management>
    <concurrency-control max-sessions="1" expired-url="/redirect-page" />
  </session-management>
</http>
相关问题