我正在尝试为我的应用设置H2数据库,并且在尝试访问控制台时,在测试连接时遇到找不到适用于08001/0错误的驱动程序。
此answer指出它与custom filter I was using有关。经过一番摸索后,我发现将调用固定在requet.getParameter(“ foo”)上,任何值都起作用,在包装程序的构造函数中,它解决了该问题。如果在将初始请求包装到新类中之前调用了该方法,这也将起作用。但是,当初始请求被包装后我尝试调用相同的方法时,此方法不起作用。
作品:
public class GlobalWrapFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.getParameter("test");
MultiReadRequestWrapper wrapper = new MultiReadRequestWrapper((HttpServletRequest) request);
chain.doFilter(wrapper, response);
}
@Override
public void destroy() {}
}
不起作用:
public class GlobalWrapFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
MultiReadRequestWrapper wrapper = new MultiReadRequestWrapper((HttpServletRequest) request);
//neither work
wrapper.getRequest().getParameter("test");
request.getParameter("test");
chain.doFilter(wrapper, response);
}
@Override
public void destroy() {}
}
通过查看附加的源,似乎调用应该委托给包装的请求,这应该是引用,这意味着它的行为与包装之前的调用相同。逐步执行此操作似乎与将受保护的字段parameterParsed设置为true有关,但不保留已解析的值。我想知道是否有人知道我的新包装器为什么导致事物中断,以及为什么在包装之前调用与参数相关的方法之一导致事物再次起作用,但之后却没有起作用。