我想拦截过滤器/ servlet中的请求并向其添加一些参数.但是,请求不会公开'setParameter'方法,并且操作时参数map会抛出一个错误,说明它已被锁定.我可以试试吗?
子类HttpServletRequestWrapper
并覆盖getParameter
方法.这个类的描述如下:
提供HttpServletRequest接口的便捷实现,该接口可以由希望将请求适配到Servlet的开发人员进行子类化.
在过滤器中,将请求包装在子类的实例中.
我ussualy将原始的HttpServletRequest包装到一个新的CustomHttpServletRequest中,该CustomHttpServletRequest充当原始请求的代理,然后将这个新的CustomHttpServletRequest传递给过滤器链.
在这个CustomHttpServletRequest中,您可以覆盖getParameterNames,getParameter,getParameterMap方法以返回您想要的任何参数.
这是过滤器的一个示例:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletRequest customRequest = new CustomHttpServletRequest(httpRequest); customRequest.addParameter(xxx, "xxx"); chain.doFilter(customRequest, response); }