gpt4 book ai didi

java - Spring 如何向 session 变量添加新的 _csrf token ?

转载 作者:行者123 更新时间:2023-11-30 02:55:36 25 4
gpt4 key购买 nike

当有人在 Spring OAuth2 ( Source code for the API at this link ) 中对 /oauth/authorize 执行 POST 时,CSRF token 会在服务器上更新。

什么特定的代码语法可用于:
1.) 在代码中访问新创建的 CSRF token ?
2.) 将新创建的 CSRF token 的副本分配给惰性 session 变量?
3.) 随后检索新的 session 变量以在不同的类中使用?

此要求的上下文是一个控制流,涉及通过多个过滤器和 Controller 的变量路由,同时用户多次通过 /oauth/authorize 端点。变量需要保存到 session 范围,然后根据算法的需要从 session 范围中检索并放回到请求范围中。

可能需要创建和使用上述 session 变量的类类型示例包括:

1.) 任何带有 @Controller annotation 的类,
2.) OncePerRequestFilter 的任何自定义实现,
3.) DefaultOAuth2RequestFactory 的任何自定义实现,
4.) 以及自定义过滤器链中使用的其他类型的类。

这可能是 Spring MVC 问题或 Spring Security 问题,或两者兼而有之,即使它涉及 Spring OAuth2 API,其源代码是由 Spring MVC 和 Spring Security 构建的。

最佳答案

Spring Security 文档详细介绍了这一点。您可以使用部分标题 Include the CSRF Token 访问 token 。本节摘要:

  • 解决此问题的一种方法是使用 _csrf 请求属性获取当前的 CsrfToken。下面显示了使用 JSP 执行此操作的示例:
<c:url var="logoutUrl" value="/logout"/>
<form action="${logoutUrl}"
method="post">
<input type="submit"
value="Log out" />
<input type="hidden"
name="${_csrf.parameterName}"
value="${_csrf.token}"/>
</form>
  • 如果您使用 Spring MVC <form:form>标签或 Thymeleaf 2.1+ 并正在使用 @EnableWebSecurityCsrfToken会自动为您包含在内(使用 CsrfRequestDataValueProcessor )。请参阅Automatic Token Inclusion了解详情。
  • Spring Security 提供 CsrfTokenResolver可以自动解析当前CsrfToken对于 Spring MVC 参数。通过使用@EnableWebSecurity您将自动将其添加到 Spring MVC 配置中。如果您使用基于 XML 的配置,则必须自行添加。

一次CsrfTokenResolver配置正确后,您可以公开 CsrfToken到基于静态 HTML 的应用程序。

@RestController
public class CsrfController {

@RequestMapping("/csrf")
public CsrfToken csrf(CsrfToken token) {
return token;
}
}

保留 CsrfToken 很重要来自其他域的 secret 。这意味着如果您使用跨源共享 (CORS),则不应将 CsrfToken 暴露给任何外部域。

关于java - Spring 如何向 session 变量添加新的 _csrf token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37285984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com