我参考了有关配置CSRF保护的Spring Security文档:
相反,默认情况下,Spring Security的CSRF保护会产生一个 HTTP 403访问被拒绝。这可以通过配置来定制 AccessDeniedHandler以不同方式处理InvalidCsrfTokenException。
见这里:http://docs.spring.io/spring-security/site/docs/3.2.6.RELEASE/reference/htmlsingle/#csrf-configure
我不确定如何配置我的处理程序以处理无效的CSRF令牌。
private AccessDeniedHandler accessDeniedHandler() {
return new AccessDeniedHandler() {
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {
// TODO: deal with InvalidCsrfTokenException
response.setStatus(HttpStatus.FORBIDDEN.value());
}
};
}
我在客户端使用angular与REST中的Spring应用程序进行通信。
处理过时/无效CSRF令牌的最佳方法是什么?
我是否应该使用AccessDeniedHandler
来添加自定义http响应标头,指示CSRF令牌无效并在客户端进行处理?但是如何从JS请求新的CSRF令牌?
还有其他更好的方法可以继续吗?我怎么能
以不同方式处理InvalidCsrfTokenException
答案 0 :(得分:4)
如果您提供详细的错误消息,请使用AccessDeniedHandler
。处理程序管理InvalidCsrfTokenException
和MissingCsrfTokenException
为什么要生成csrf令牌?每当您请求站点弹簧将为您生成它。但如果您真的想要实施自己的csrf策略,请查看CsrfAuthenticationStrategy
Spring每次都会在SessionManagementFilter
中调用此类