我有以下 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/