Spring Security配置类中设置了.logoutUrl(“/logout“),但是网页访问/logout超链接跳转到404

主要内容

问题:

在使用springboot(2.6.13)+springsecurity+thymeleaf练习时,发现在springsecurity的配置类中设置了注销相关的内容:

.logout() // 配置注销行为
.logoutUrl("/logout")

在thymeleaf模板中,配置了超链接:

 <a href="/logout">退出登录</a>

前端访问时,会直接跳转到404页面,登录状态也还在,显然是未访问到对应的路径。

原因:

springsecurity不知道是不是和版本有关系(望解答),注销的路径访问的请求默认是post,和AI问的时候说默认是get,导致请求的时候需要CSRF验证,而前端get请求是不会携带的,导致了报错。

处理方式(选一种即可)

  1. 修改注销的请求方式为get,在配置类中增加:
.logoutRequestMatcher(new AntPathRequestMatcher("/logout", "GET"))
  1. 取消springsecurity的CSRF验证,一般前后端分离时可能已经关掉了。在配置类最后或者中间增加:
 .and()
 .csrf().disable();
  1. 通过thymeleaf获得上下文的CSRF令牌,把退出登录做成表单提交按钮,post请求注销的路径,并携带访问令牌,没有测试过:
<th:block th:with="csrfToken=${_csrf.token}">
    <!-- 现在可以在模板中使用${csrfToken} -->
</th:block>

<form th:action="@{/logout}" method="post">
    <input type="hidden" name="_csrf" th:value="${csrfToken}" />
    <button type="submit">Submit</button>
</form>
  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值