java

时间:2016-09-20 14:23:02

标签: java jsp tomcat servlets

我需要在我的应用程序中实现一个在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")它的工作。

无论如何,请帮忙建议我可以写一个过滤器。

0 个答案:

没有答案