我正在开发一个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 http://localhost:9090/Login?x=true&org.apache.catalina.filters.CSRF_NONCE=7DE88A93A526E465566864684FEB01C9 将Post请求发送到Login servlet。它有CSRF_NONCE但仍然响应状态为403.我已经阅读了很多文档但是找不到任何解决方案来验证post requet。
我还说我需要对所有网址进行编码,但无法找到我应该怎么做。我需要为此编写过滤器吗?
答案 0 :(得分:3)
最后我得到了答案。我在这里张贴给其他人。
为了渲染JSP,我正在使用RequestDispatcher对象
if($time > date('Y-m-d',strtotime('second sunday of march')) &&
$time < date('Y-m-d',strtotime('first sunday of november'))){
return true;
}else{
return false;
}
因此,过滤器未应用于给定的URL。最后我找到了答案。我应该在Servlet处理程序中使用filter或response.sendRedirect方法在参数中使用dispatcher。
http://www.theserverside.com/news/thread.tss?thread_id=34168