我需要在我的应用程序中实现一个在Tomcat 7上运行的CSRF过滤器。我已经使用Tomcat CSRF Filter使这个过滤器在我的应用程序中运行。我需要提交由HttpServlet#encodeURL
编码的每个操作需求由于我的应用程序非常遗留,因此有很多jsp's
将近700个使用Scriptlet标记或Javascript调用从jsp到jsp或jsp到servlet的操作。
如何配置过滤器或任何类型的机制,使得提交给servlet的每个操作都将由HttpServletResponse#encodeURL
编码
无论如何,我已尝试使用Servlet Request
封装encodedURL
的过滤器,我已按照以下链接Request URL Rewriting进行操作。
public class UrlRewriteFilter implements Filter {
@Override
public void init(FilterConfig config) throws ServletException {
//
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
final HttpServletRequest req = (HttpServletRequest) request;
final HttpServletResponse res = (HttpServletResponse) response;
final HttpServletRequestWrapper wrapped = new HttpServletRequestWrapper(req) {
@Override
public StringBuffer getRequestURL() {
final StringBuffer originalUrl = ((HttpServletRequest) req).getRequestURL();
return new StringBuffer(res.encodeURL(req.getRequestURL()));
//I have added in above string Buffer building with including server path, but still no work
}
};
chain.doFilter(wrapped, response);
}
@Override
public void destroy() {
//
}
}
我已尝试过上述解决方案,仍无法正常工作
不工作意味着过滤器CsrfPreventionFilter
通过返回403
代码来拒绝每个请求。
如果我提交任何jsp response.encodeURL("url")
它的工作。
无论如何,请帮忙建议我可以写一个过滤器。