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

用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 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 R语言卸载之后无法重装,显示电脑存在下载某些较大二进制文件行为,怎么办
  • ¥15 java 的protected权限 ,问题在注释里