无法使用 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
我正在开发 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