栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

无法使用Spring Security创建CSRF令牌

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

无法使用Spring Security创建CSRF令牌

我终于解决了这个问题,但是它基本上需要重写Spring Security。这就是它的全部荣耀。

首先,我遵循了Eyal Lupu 在此处的精彩博客文章中的建议,但是由于我的AJAX要求,我不得不根据自己的情况进行调整。

至于Thymeleaf的情况,关键花絮隐藏在Thymeleaf论坛的档案中-臭名昭著的第7期。

https://github.com/thymeleaf/thymeleaf-
spring/issues/7#issuecomment-27643488

Thymeleaf的创建者本人最后的评论是:

th:action
…检测何时将此属性应用到标记上(无论如何应该是唯一的位置),并且在这种情况下调用
RequestDataValueProcessor.getExtraHiddenFields
(…),并在结束标记之前添加返回的隐藏字段。

那是我需要令牌才能工作的关键词。不幸的是,为什么

th:action
也要启动尚不完全清楚
getExtraHiddenFields
,但是无论如何它确实很重要。

因此,对于任何在Thymeleaf + Spring Security CSRF + AJAX
POST上苦苦挣扎的人来说,这是我的步骤(虽然可以将其缩减很多,但是这些是解决该问题的高级概念):

  1. 实现Spring接口RequestDataValueProcessor并在Spring Security的XML配置中注册它,以便您可以重写方法getExtraHiddenFields,该方法允许您将隐藏的输入字段插入HTML(当然带有标记)。令牌本身是使用Java.Util UUID生成的。

  2. 使用JQuery,从该隐藏字段中读取值,然后设置请求标头的“ X-CSRF-Token”属性,以使其通过HTTP发送。无法将令牌仅保留在隐藏的输入字段中,因为我们没有执行表单Submit,而是使用AJAX POST来调用服务器端的方法。

  3. 扩展Spring的HandlerInterceptorAdapter并将其注册为拦截器,以便每次执行POST方法时,都会调用服务器端的“ preHandle”方法,以便可以将请求令牌(从上一步的HTTP标头中提取)与请求令牌进行比较。会话的令牌(应该相同!)。执行此检查后,它可以允许请求通过或返回错误。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/374343.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号