SpringSecurity没有过滤默认的“/logout”,出现404页面

本文解决了一个在使用Spring Security配置时遇到的问题,即默认启用了CSRF防护导致“/logout”路径必须使用POST方式提交。

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

SpringSecurity没有过滤“/logout”请求

此时,我的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方式。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值