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

bal*_*teo 12 spring-mvc csrf spring-security

我参考了有关配置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());
            }
        };
    }
Run Code Online (Sandbox Code Playgroud)

我在客户端使用angular与REST中的Spring应用程序进行通信.

处理过时/无效CSRF令牌的最佳方法是什么?

我应该使用它AccessDeniedHandler来添加一个自定义的http响应头,表明CSRF令牌无效并在客户端进行处理吗?但是如何从JS请求新的CSRF令牌?

还有其他更好的方法可以继续吗?我怎么办?

以不同方式处理InvalidCsrfTokenException

Man*_* Zi 4

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

为什么要生成 csrf 令牌?每次您请求一个站点时,spring 都会为您生成它。但如果你真的想实现自己的 csrf 策略,请查看CsrfAuthenticationStrategy

Spring每次在SessionManagementFilter中都会调用这个类