Java 在Jetty中使用自定义WebAppClassloader

Java 在Jetty中使用自定义WebAppClassloader,java,spring,jetty,classloader,Java,Spring,Jetty,Classloader,我正在为我们公司编写一个基于spring的web应用程序,我收到了一份订单,要求我对应用程序的类进行加密 我发现了一个类加载器的简单实现,可以实现这个功能。它基本上是一个URLClassLoader,实现自己的loadClass和findClass方法 我按照jettywiki@eclipse的说明,通过扩展WebAppClassLoader创建了自己的类加载器。我已经按照第一个链接中的建议实现了findClass()和loadClass()方法(几乎是复制和粘贴) 我的类加载器的完整代码可以在

我正在为我们公司编写一个基于spring的web应用程序,我收到了一份订单,要求我对应用程序的类进行加密

我发现了一个类加载器的简单实现,可以实现这个功能。它基本上是一个URLClassLoader,实现自己的loadClass和findClass方法

我按照jettywiki@eclipse的说明,通过扩展WebAppClassLoader创建了自己的类加载器。我已经按照第一个链接中的建议实现了findClass()和loadClass()方法(几乎是复制和粘贴)

我的类加载器的完整代码可以在这里看到

我已经在jetty中使用上下文设置了类加载器

<Configure id="clsLdrCtx" class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="contextPath">/server</Set>
     <Set name="war">
       /home/me/workz/protection/classloading/server/target/server-0.0.0-SNAPSHOT.war</Set>
     <Set name="classLoader">
       <New class="org.eclipse.jetty.webapp.WebAppClassLoaderEncrypted">
         <Arg><Ref id="clsLdrCtx"/></Arg>
       </New>
     </Set>
</Configure>
(完整堆栈跟踪也位于与上述相同的gist链接上)

(如果我没有实现findClass(),它将使用URLClassLoader中的实现,并且运行良好。)

你能看出问题出在哪里吗?我很高兴得到任何答案,谢谢你把在web应用程序中加密类的优点(缺乏)放在一边

您的类加载器似乎无法工作,因为您未能维护/复制WebAppClassLoader中的适当行为

查看WebAppClassLoader的源代码,您将看到它对“系统”和“服务器”类有特殊处理。你需要包括这种行为

您得到的结果(可能)是您的过滤器正在实现“过滤器”接口(即,由您自己的类加载器加载的过滤器类),而不是服务器的“过滤器”接口(由Jetty的根类加载器加载的接口)

2011-10-11 14:59:58.401:WARN::FAILED encodingFilter: java.lang.IllegalStateException: class org.springframework.web.filter.CharacterEncodingFilter is not a javax.servlet.Filter