繁体   English   中英

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

[英]Not able to authenticate post request for CSRF token with tomcat

我正在开发一个tomcat应用程序。 我正在尝试添加catlina库提供的CSRF身份验证令牌(org.apache.catalina.filters.CsrfPrevention)。 我在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发送Post请求到Login servlet http:// localhost:9090 / Login?x = true&org.apache.catalina.filters.CSRF_NONCE = 7DE88A93A526E465566864684FEB01C9 它具有CSRF_NONCE但仍然响应具有状态403.我已经阅读了许多文档但是找不到任何解决方案来验证post requet。

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

最后我得到了答案。 我在这里张贴给其他人。

为了呈现JSP,我使用的是RequestDispatcher对象

dispatcher.forward(request, response);

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM