配置AccessDeniedHandler以处理无效的csrf令牌

时间:2015-03-18 13:49:01

标签: spring-mvc spring-security csrf

我参考了有关配置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 个答案:

答案 0 :(得分:4)

如果您提供详细的错误消息,请使用AccessDeniedHandler。处理程序管理InvalidCsrfTokenExceptionMissingCsrfTokenException

为什么要生成csrf令牌?每当您请求站点弹簧将为您生成它。但如果您真的想要实施自己的csrf策略,请查看CsrfAuthenticationStrategy

Spring每次都会在SessionManagementFilter

中调用此类