0bj*_*3ct 4 java spring spring-mvc csrf spring-security
如何在Spring Controller中获取_csrf对象(?!)?我已经配置了Spring Security,可以在jsp文件中获得$ {_ csrf}请求属性。我试过了:
CsrfToken _csrf = (CsrfToken) session.getAttribute("CsrfToken");
CsrfToken _csrf = (CsrfToken) session.getAttribute("_csrf");
Run Code Online (Sandbox Code Playgroud)
结果为空;
提前致谢!
要访问 Spring 控制器中的 CSRF 令牌,您可以简单地执行以下操作:
@Controller
public class FooController {
@RequestMapping("/foo")
public void foo(CsrfToken token) {
// Do whatever with token
}
}
Run Code Online (Sandbox Code Playgroud)
Spring将根据参数的类型自动检测您是否需要令牌,并将其注入到您的方法中。
至少从 Spring Security 5.0 开始,如果您使用 Spring Boot 或@EnableWebSecurity在配置中包含注释,则此方法有效。
在调试中,我看到了带有键“ org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository.CSRF_TOKEN”的会话属性。我查看了HttpSessionCsrfTokenRepository类。它具有从传入的HttpServletRequest对象加载令牌的方法。
最后,这对我有用:
CsrfToken token = new HttpSessionCsrfTokenRepository().loadToken(request);
Run Code Online (Sandbox Code Playgroud)
如果有人向我解释了它的工作原理,我将不胜感激。
| 归档时间: |
|
| 查看次数: |
4365 次 |
| 最近记录: |