配置 AccessDeniedHandler 以处理无效的 csrf 令牌
Posted
技术标签:
【中文标题】配置 AccessDeniedHandler 以处理无效的 csrf 令牌【英文标题】:Configuring an AccessDeniedHandler in order to process an invalid csrf token 【发布时间】:2015-05-21 08:14:44 【问题描述】:我参考了关于配置 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
?
【问题讨论】:
【参考方案1】:如果您提供详细的错误消息,请使用AccessDeniedHandler
。处理程序管理InvalidCsrfTokenException
和MissingCsrfTokenException
为什么要生成 csrf 令牌?每次您请求站点时,spring 都会为您生成它。但如果你真的想实现自己的 csrf 策略,请查看CsrfAuthenticationStrategy
Spring每次在SessionManagementFilter中调用这个类
【讨论】:
以上是关于配置 AccessDeniedHandler 以处理无效的 csrf 令牌的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security教程---- 自定义AccessDeniedHandler
如何在grails中编写accessDeniedHandler
Spring WebFlux 安全自定义 AccessDeniedHandler