在拦截器中继承HttpServletRequestWrapper后 无法在preHandle方法中对HttpServletRequest进行类型转换并报错class org.apache.catalina.connector.RequestFacade cannot be cast to class com.myhexin.event.config.RequestWrapper
时间: 2023-12-16 22:04:03 浏览: 84
javaweb中Filter(过滤器)的常见应用
这是因为 HttpServletRequestWrapper 的构造函数需要传入原始的 HttpServletRequest 对象,并将其保存在该对象中,以便在需要时调用原始请求的方法。而在拦截器中,传入的 HttpServletRequest 对象实际上是一个 RequestFacade 对象,而不是原始的 HttpServletRequest。
要解决此问题,可以在拦截器中先将 HttpServletRequest 对象转换为 RequestFacade 对象,然后再将其转换为自定义的 RequestWrapper 对象。具体实现如下:
```
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpServletRequest req = (HttpServletRequest) request;
RequestFacade facade = (RequestFacade) req;
RequestWrapper wrapper = new RequestWrapper(facade);
// 对 wrapper 进行操作
return true;
}
```
其中,RequestWrapper 是自定义的类,继承HttpServletRequestWrapper。在 RequestWrapper 中,需要实现相应的方法,以便在需要时调用原始请求的方法。
阅读全文