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类的父类加载器,所以无法从父类加载器转向子类,也有可能二者没有继承关系,没有试验,但是应该是这个原因导致的

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

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?