【问题标题】:Confusion with Spring Security in Spring BootSpring Boot 中与 Spring Security 的混淆
【发布时间】:2017-11-22 07:24:16
【问题描述】:

我正在使用 Spring Boot 1.4.2.RELEASE、Spring Security 4.1.3.RELEASE 和 Java 8。

对于安全配置,我有以下类:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/assets/**", "/logout", "/login");
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .sessionManagement()  //  1
                    .sessionFixation() // 2
                    .migrateSession() // 3
                    .maximumSessions(1) // 4
                    .maxSessionsPreventsLogin(true).expiredUrl("/login").and() // 5
                    .invalidSessionUrl("/login") // 6
                    .and() // 7
                .authorizeRequests()
                    .antMatchers("/app/**").authenticated()
                    .antMatchers("/about").permitAll()
                    .anyRequest().authenticated().and()
                .formLogin()
                    .loginPage("/login").permitAll()
                    .loginProcessingUrl("/auth").permitAll()
                    .defaultSuccessUrl("/app/index", true)
                    .failureUrl("/login?error")
                    .usernameParameter("uid")
                    .passwordParameter("pwd").and()
                .logout()
                    .permitAll()
                    .invalidateHttpSession(true)
                    .logoutUrl("/logout").permitAll()
                    .logoutSuccessUrl("/login").permitAll()
                    .clearAuthentication(true).and()
                .exceptionHandling().and()
                .csrf().disable()
                .headers().frameOptions().disable()
                .cacheControl().and();
    }
}

当尝试访问“/about”(允许所有人)时,将我重定向到“/login”。我再次尝试,现在它允许我访问“/about”。

我在配置类中更改了请求的授权顺序,但不起作用。当我删除 sessionManagement 的行(1 到 7)时,一切正常。

我需要任何额外的配置吗?

【问题讨论】:

    标签: java spring spring-boot spring-security


    【解决方案1】:

    当您对此进行测试时,您是否清除了与您的测试站点相关的浏览器 cookie?会话管理过滤器设置一个 jsessionid cookie,它会被发回。您的浏览器不知道您重置了服务器,因此认为 cookie 很好,并且您发回了无效会话。

    您可能需要查看会话创建策略,看看它是否适合您的目的。

    【讨论】:

    • 谢谢!我只需添加sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) 即可!
    猜你喜欢
    • 2021-09-07
    • 2015-02-16
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 2019-09-13
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多