2016-04-10 200 views
3

我正在开发一个tomcat应用程序。我正在尝试添加由catlina库(org.apache.catalina.filters.CsrfPrevention)提供的CSRF身份验证令牌。我已经加入过滤到web.xml 无法使用tomcat验证CSRF令牌的发布请求

<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> 

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

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

回答

2

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

用于渲染的JSP我使用

dispatcher.forward(request, response); 

所以过滤器没有得到应用到给定的URL的RequestDispatcher对象。最后我找到了答案。或者我应该在Servlet处理程序中使用带有filter或response.sendRedirect方法的参数调度程序。

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

相关问题