tkk13 2017-01-09 05:07 采纳率: 20%
浏览 1410
已采纳

用CGLib对Tomcat的RequestFacade类构造动态代理类时发生的类型转换异常

我想在过滤器里返回代理后的servletrequest,发现其底层是tomcat的catlina包下的RequestFacade类,所以准备对它用cglib进行代理,增强其方法,此时发现对servletrequest强类转为RequestFacade时,报异常:
org.apache.catalina.connector.RequestFacade cannot cast to org.apache.catalina.connector.RequestFacade
RequestFacade这个类的包我是在lib中放入了tomcat/lib下的catlina.jar后才有的,这个包应该就是tomcat使用的包,请问问题出在哪里呢?~~

    public void doFilter(ServletRequest servletrequest,
            ServletResponse servletresponse, FilterChain filterchain)
            throws IOException, ServletException {
        //此处发生类型转换异常
        RequestFacade request = (RequestFacade)servletrequest;
        HttpServletResponse response = (HttpServletResponse)servletresponse;
        HttpServletRequest newrequest=new CGLibProxy(request).createProxy();
        String testString = newrequest.getRequestURL().toString();
        System.out.println(testString);
        filterchain.doFilter(newrequest, response);
    }
  • 写回答

1条回答

  • 68号小喇叭 2017-01-09 05:28
    关注

    传进来的requestfecade应该是由加载tomcat lib的类加载器加载的,而前面的requestfacade和当前filter类是同一个类加载器,而后面的类加载器
    是filter类的父类加载器,所以无法从父类加载器转向子类,也有可能二者没有继承关系,没有试验,但是应该是这个原因导致的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 matlab求解平差
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办