Java 如何禁用TrueZIP密钥管理器服务?

Java 如何禁用TrueZIP密钥管理器服务?,java,truezip,Java,Truezip,我想在服务器中使用TrueZIP 7.7库来解压缩用户上传的档案。我不打算使用加密档案,尤其是,因为这是一个服务器,我不需要一个Swing弹出窗口来请求密钥。但是,当我创建一些简单的文件解压缩测试时,它失败了,出现了以下错误: java.util.ServiceConfigurationError: de.schlichtherle.truezip.key.spi.KeyManagerService: Provider de.schlichtherle.truezip.fs.archive.zi

我想在服务器中使用TrueZIP 7.7库来解压缩用户上传的档案。我不打算使用加密档案,尤其是,因为这是一个服务器,我不需要一个Swing弹出窗口来请求密钥。但是,当我创建一些简单的文件解压缩测试时,它失败了,出现了以下错误:

java.util.ServiceConfigurationError: de.schlichtherle.truezip.key.spi.KeyManagerService: Provider de.schlichtherle.truezip.fs.archive.zip.raes.PromptingKeyManagerService could not be instantiated: java.lang.NoClassDefFoundError: de/schlichtherle/truezip/swing/EnhancedPanel
        at java.util.ServiceLoader.fail(ServiceLoader.java:207)
        at java.util.ServiceLoader.access$100(ServiceLoader.java:164)
        at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:353)
        at java.util.ServiceLoader$1.next(ServiceLoader.java:421)
        at de.schlichtherle.truezip.key.sl.KeyManagerLocator$Boot.<clinit>(KeyManagerLocator.java:60)
        at de.schlichtherle.truezip.key.sl.KeyManagerLocator.get(KeyManagerLocator.java:41)
        at de.schlichtherle.truezip.key.AbstractKeyManagerProvider.get(AbstractKeyManagerProvider.java:22)
        at de.schlichtherle.truezip.fs.archive.zip.KeyController.getKeyManager(KeyController.java:62)
        at de.schlichtherle.truezip.fs.archive.zip.KeyController.sync(KeyController.java:129)
        at de.schlichtherle.truezip.fs.FsDecoratingController.sync(FsDecoratingController.java:131)
        at de.schlichtherle.truezip.fs.FsFalsePositiveArchiveController.sync(FsFalsePositiveArchiveController.java:480)
        at de.schlichtherle.truezip.fs.FsManager.sync(FsManager.java:105)
        at de.schlichtherle.truezip.fs.FsDefaultManager.sync(FsDefaultManager.java:190)
        at de.schlichtherle.truezip.fs.FsSyncShutdownHook$Hook.run(FsSyncShutdownHook.java:93)
Caused by: java.lang.NoClassDefFoundError: de/schlichtherle/truezip/swing/EnhancedPanel
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at de.schlichtherle.truezip.fs.archive.zip.raes.PromptingKeyManagerService.<init>(PromptingKeyManagerService.java:37)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at java.lang.Class.newInstance0(Class.java:355)
        at java.lang.Class.newInstance(Class.java:308)
        at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:345)
        ... 11 more
Caused by: java.lang.ClassNotFoundException: de.schlichtherle.truezip.swing.EnhancedPanel
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        ... 31 more
java.util.ServiceConfigurationError:de.schlichtherle.truezip.key.spi.KeyManagerService:Provider de.schlichtherle.truezip.fs.archive.zip.raes.PromptingKeyManagerService无法实例化:java.lang.NoClassDefFoundError:de/schlichtherle/truezip/swing/EnhancedPanel
在java.util.ServiceLoader.fail处(ServiceLoader.java:207)
在java.util.ServiceLoader.access$100(ServiceLoader.java:164)
位于java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:353)
位于java.util.ServiceLoader$1.next(ServiceLoader.java:421)
位于de.schlichtherle.truezip.key.sl.KeyManagerLocator$Boot.(KeyManagerLocator.java:60)
位于de.schlichtherle.truezip.key.sl.KeyManagerLocator.get(KeyManagerLocator.java:41)
位于de.schlichtherle.truezip.key.AbstractKeyManagerProvider.get(AbstractKeyManagerProvider.java:22)
位于de.schlichtherle.truezip.fs.archive.zip.KeyController.getKeyManager(KeyController.java:62)
位于de.schlichtherle.truezip.fs.archive.zip.KeyController.sync(KeyController.java:129)
位于de.schlichtherle.truezip.fs.FsDecoratingController.sync(FsDecoratingController.java:131)
在de.schlichtherle.truezip.fs.fsFalsePositiverAchiveController.sync(fsFalsePositiverAchiveController.java:480)
位于de.schlichtherle.truezip.fs.FsManager.sync(FsManager.java:105)
位于de.schlichtherle.truezip.fs.FsDefaultManager.sync(FsDefaultManager.java:190)
位于de.schlichtherle.truezip.fs.FsSyncShutdownHook$Hook.run(FsSyncShutdownHook.java:93)
原因:java.lang.NoClassDefFoundError:de/schlichtherle/truezip/swing/EnhancedPanel
位于java.lang.ClassLoader.defineClass1(本机方法)
位于java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
位于java.lang.ClassLoader.defineClass(ClassLoader.java:615)
位于java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
位于java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
在java.net.URLClassLoader.access$000(URLClassLoader.java:58)
在java.net.URLClassLoader$1.run(URLClassLoader.java:197)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:190)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:306)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:247)
位于de.schlichtherle.truezip.fs.archive.zip.raes.PromptingKeyManagerService。(PromptingKeyManagerService.java:37)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:513)
位于java.lang.Class.newInstance0(Class.java:355)
位于java.lang.Class.newInstance(Class.java:308)
位于java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:345)
... 还有11个
原因:java.lang.ClassNotFoundException:de.schlichtherle.truezip.swing.EnhancedPanel
位于java.net.URLClassLoader$1.run(URLClassLoader.java:202)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:190)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:306)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 还有31个

是否可以完全禁用TrueZIP密钥管理,或者至少确保它不需要任何Swing组件来提取ZIP文件?

使用TrueZIP,您必须满足TrueZIP驱动程序ZIP对TrueZIP Swing的依赖性,否则您将无法摆脱此异常。只要你的应用没有遇到WinZip AES加密条目,密钥管理器弹出窗口就不会出现。您还可以按照本文的说明实现自己的密钥管理:(但仍然需要满足这种依赖性)


或者,您可以迁移到。TrueVFS有一个更加模块化的体系结构,您可以简单地在类路径上添加模块以获得相同的效果。

使用TrueZIP,您必须满足TrueZIP驱动程序ZIP对TrueZIP Swing的依赖性,否则您将无法摆脱此异常。只要你的应用没有遇到WinZip AES加密条目,密钥管理器弹出窗口就不会出现。您还可以按照本文的说明实现自己的密钥管理:(但仍然需要满足这种依赖性)


或者,您可以迁移到。TrueVFS有一个更加模块化的体系结构,您可以简单地在类路径上添加模块以获得相同的效果。

“只要您的应用程序没有遇到WinZip AES加密条目”——如果遇到了,例如,我的web应用程序的用户上载了这样的文件,该怎么办?没有人能够在Web服务器上键入Swing弹出窗口。有没有一种方法可以禁用它,而不是在加密档案上立即失败?另外,我现在不能使用TrueVFS,因为我们目前使用Java 6。异常失败是TrueCommons KeyManager在TrueVFS中所做的。由于您不能使用它,您必须通过遵循第一个链接来实现您自己的密钥管理,也就是说,我忘了提到另一个更简单的选择:您可以将JVM设置为无头模式-请参阅。AFAIK这也应该禁用