Spring security logoutSuccessUrl to login?logout 似乎受到保护,虽然登录页面允许所有人

标签 spring spring-security

我有以下 Spring Security 设置。
请注意,成功注销会再次返回登录页面。

    http
        .csrf()
            .disable()
        .authorizeRequests()
            .antMatchers("/**").hasRole("USER")
            .and()
        .formLogin()
            .loginPage("/login")
            .failureUrl("/login?error")
            .defaultSuccessUrl("/")
            .permitAll()
            .and()
        .logout()
            .logoutUrl("/logout")
            .logoutSuccessUrl("/login?logout")

我可以使用此设置登录和注销。
然而,注销以/login 而不是/login?logout 结束。

当我再次登录时,它会转到/login?logout。

所以看起来/login?logout 似乎受到保护......尽管登录页面是允许的。

任何想法如何解决这个问题?

编辑

正如 Bart 建议的那样,我尝试添加一个 AntMatcher 进行登录?注销,例如:
    http
        .csrf()
            .disable()
        .authorizeRequests()
            .antMatchers("/ogin?logout").permitAll()
            .antMatchers("/app/**").hasRole("USER")
            .antMatchers("/login?logout").permitAll()
            .and()
        .formLogin()
            .loginPage("/app/login")
            .failureUrl("/app/login?error")
            .defaultSuccessUrl("/app")
            .permitAll()
            .and()
        .logout()
            .logoutUrl("/app/logout")
            .logoutSuccessUrl("/app/login?logout")

但它给出了相同的行为。注意我尝试在保护所有/** 源之前和之后添加它。

最佳答案

现在使用以下代码遇到了对我有用的相同问题:

http.logout().logoutSuccessUrl("/login?logout").permitAll();

(即添加 .permitAll() 是关键部分)

关于Spring security logoutSuccessUrl to login?logout 似乎受到保护,虽然登录页面允许所有人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22946927/

相关文章:

Spring AOP : exclude avoid final classes and enums from pointcut

java - (Maven项目)无法找到或加载主类 "class"

spring-security - Spring Boot OAuth2 - GoogleApi - 无法从 token 获取用户详细信息

spring-security - Spring Boot + Security + Thymeleaf 和 CSRF token 未自动注入(inject)

java - 测试人员登录和 Spring Security

java - 如何使用 Spring Security 模拟身份验证和授权

java - 静态文件找不到 Spring MVC + Thymeleaf

java - com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : Communications link failure Software caused connection abort: recv failed

java - 在 Spring MVC 中处理多部分和非多部分 HTTP POST

java - 禁用 EnableGlobalMethodSecurity 注释