gpt4 book ai didi

java - 在 Jetty 中使用自定义 WebAppClassloader

转载 作者:行者123 更新时间:2023-12-02 08:40:45 26 4
gpt4 key购买 nike

我正在为我们公司编写一个基于 Spring 的 Web 应用程序,并且我收到了应该对我们应用程序的类进行加密的命令。

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

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

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

我已经使用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>

我启动了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

(完整的堆栈跟踪也位于与上面相同的要点链接上)

(如果我不实现 findClass(),它会使用 URLClassLoader 的实现,并且运行得很好。)

你能看出可能是什么问题吗?我很高兴得到任何答复,谢谢

最佳答案

抛开在网络应用程序中加密类的(缺乏)优点......

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

查看 WebAppClassLoader 的源代码,您会发现它对“系统”和“服务器”类有特殊处理。您需要包含该行为。

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

关于java - 在 Jetty 中使用自定义 WebAppClassloader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7726848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com