使用GWT RequestFactoryServlet的CSRF过滤

使用GWT RequestFactoryServlet的CSRF过滤,gwt,servlet-filters,csrf,requestfactory,Gwt,Servlet Filters,Csrf,Requestfactory,我正在基于请求工厂的GWT应用程序中实施基于令牌的系统,以防止CSRF攻击 为了在服务器端实现我的过滤器,我已经覆盖了RequestFactoryServlet上的doPost方法,因此: @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String sessionToken =

我正在基于请求工厂的GWT应用程序中实施基于令牌的系统,以防止CSRF攻击

为了在服务器端实现我的过滤器,我已经覆盖了RequestFactoryServlet上的doPost方法,因此:

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

    String sessionToken = CsrfTokenManager.getToken(request.getSession());
    String requestToken = request.getHeader(CsrfTokenManager.CSRF_TOKEN_NAME);
    if (sessionToken.equals(requestToken)) {
        super.doPost(request, response);
    } else {
        logger.error(String.format("Received unsafe http request [%s]", getFullRequest(request)));
        response.sendError(401,"Unsafe HTTP Request");
    }
}
这是因为它不允许处理没有有效令牌的请求,并且我的日志包含合适的消息,但是我返回的错误是500内部服务器错误,而不是401


有人能解释一下为什么会出现这种情况,以及我应该采取什么不同的做法吗?

关于500内部服务器错误的原因,您提供的信息很少。请共享异常堆栈跟踪(500内部服务器错误会引发一个)


如果不是基于GWT建议,也要避免实现自定义的。请在上阅读此stackoverflow查询。

感谢您的关注。您链接到的问题是我的解决方案所基于的问题。我不太清楚周五我在做什么,但我只是尝试复制我的500错误,这样我就可以发布堆栈跟踪,现在我得到了我期望的401。再次感谢!