无法使用 tomcat 验证 post 对 CSRF 令牌的请求

Not able to authenticate post request for CSRF token with tomcat

我正在开发 tomcat 应用程序。我正在尝试添加 catlina 库 (org.apache.catalina.filters.CsrfPrevention) 提供的 CSRF 身份验证令牌。我已将过滤器添加到 web.xml

<filter>
    <filter-name>CsrfFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CsrfPreventionFilter</filter-class>
    <init-param>
        <param-name>entryPoints</param-name>
        <param-value>/Login</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>CsrfFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

我也更新了 login.jsp

<%  String url = '/Login?x=true';
    String encodeUrl = response.encode(url);
%>
    <form action="<%=urlEncode%" action="Post">
        <input type="text" name="username"/>
        <input type="password" name="password"/>
        <button type="submit">Login</button>
    </form>

现在当我 运行 服务器登录页面正在呈现。当我输入用户名和密码时,浏览器正在使用 CSRF_NONCE http://localhost:9090/Login?x=true&org.apache.catalina.filters.CSRF_NONCE=7DE88A93A526E465566864684FEB01C9 向登录 servlet 发送 Post 请求。它具有 CSRF_NONCE 但响应状态仍为 403。我阅读了很多文档,但找不到任何解决方案来验证 post 请求。

我还读到我需要对所有网址进行编码,但找不到我应该怎么做。我需要为此编写过滤器吗?

终于找到答案了。我在这里张贴给其他人。

为了渲染 JSP 我使用了 RequestDispatcher 对象

dispatcher.forward(request, response);

因此过滤器未应用于给定的 url。最后我找到了答案。我应该在过滤器参数中使用调度程序,或者在 Servlet 处理程序中使用 response.sendRedirect 方法。

http://www.theserverside.com/news/thread.tss?thread_id=34168