在按照《Spring in Action》上第九章做的时候,发现问题,出现下面的页面:

此时,我的SpringSecurity配置如下:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.formLogin()
.loginPage("/login")
.and()
.httpBasic().realmName("SpittrSecurity")
.and()// 启用remember me
.rememberMe()
.tokenValiditySeconds(241920)
.key("spittrKey")
.and()
.authorizeRequests()
.antMatchers("/spitters/me").authenticated()
.antMatchers(HttpMethod.POST, "/spittles").authenticated()
.regexMatchers("/spitters/.*").authenticated()
.anyRequest().permitAll();
}
最终,找到原因如下:
SpringSecurity3.2开始,默认会启动CSRF防护,一旦启动了CSRF防护,“/logout” 需要用post的方式提交,SpringSecurity才能过滤。
<form th:action="@{/logout}" method="post">
<input type="submit" value="Logout"/>
</form>
只有当关闭了CSRF防护,“/logout”即可以用Get方式,也可以用post方式。
本文解决了一个在使用Spring Security配置时遇到的问题,即默认启用了CSRF防护导致“/logout”路径必须使用POST方式提交。
9081

被折叠的 条评论
为什么被折叠?



