gpt4 book ai didi

java - 在已签名的小程序中使用 AccessControler.doPrivileged 时出现 InvocableTargetException

转载 作者:行者123 更新时间:2023-11-28 21:03:28 27 4
gpt4 key购买 nike

我在小程序中有以下通过 JavaScript 调用的方法

public String getAString()
{
Object rc = AccessController.doPrivileged(
new java.security.PrivilegedAction()
{
public Object run()
{
try
{
return "OK";
}
catch (Throwable t)
{
t.printStackTrace();
return "ERROR: " + t.getMessage() + " " + t.getCause();
}
}
});


// Return value
return rc.toString();
}

小程序使用 keytool 创建的证书进行签名

当我调用 getAString() 时,如果抛出 InitationTargetException。如果我调用不使用 AccessController 类的其他方法,则不会遇到此问题。

此外,每次我打开浏览器时,即使小程序已签名,我也会被要求允许小程序运行。

我该如何解决这个问题?

编辑

我添加了一个按钮,现在我获得了更多信息:

signer information does not match signer information of other classes in the same package

我正在使用第三方存档。原始形式是未签名的,但我使用相同的证书对其进行了签名(尽管使用了不同的命令)。

编辑2这是我在 jar 上签名的方式

keytool -genkey -keystore vkeystore -keyalg rsa -dname "CN=XXX, OU=XXX, O=XXX, L=Atlanta, ST=GA,C=NL" -alias printer -validity 3600 -keypass XXX-storepass XXX

jarsigner -keystore vkeystore -storepass XXX -keypass XXX -signedjar JSPrintS.jar JSPrint.jar printer

jarsigner -keystore vkeystore -storepass XXX -keypass XXX -signedjar jPDFPrintS.jar jPDFPrint.jar printer

JSPrint.jar 包含小程序

编辑3

小程序定义是(位于 JSPrint.jar 中)

package Eplatforms;

import java.net.URL;
import java.security.AccessController;

import javax.swing.JApplet;
import java.awt.event.*;
import java.awt.*;

import com.XXX.pdfPrint.PDFPrint;

public class JSPrint extends JApplet implements ActionListener
....

jPDFPrint.jar是第三方jar

编辑4

我试图尽量减少问题,但我发现当从 jar 文件(甚至签名的文件)调用 AccessControler.doPrivileged 时,出现以下异常:

Exception in thread "main" java.lang.NoClassDefFoundError: TestPrivileges$1
at TestPrivileges.getAString(TestPrivileges.java:14)
at TestPrivileges.main(TestPrivileges.java:7)
Caused by: java.lang.ClassNotFoundException: TestPrivileges$1
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)

这是一个测试类:

http://pastebin.com/EgmdwuqL

请注意,调用其他方法不会引发此异常。

这是我编译和运行它的方法:

javac TestPrivileges.java
java TestPrivileges
jar cvf TestPrivileges.jar TestPrivileges.class
jarsigner -keystore vkeystore -storepass My0Company -keypass My0Company -signedjar TestPrivilegesS.jar TestPrivileges.jar printer
copy TestPrivilegesS.jar x /Y
copy TestPrivileges.jar x /Y
cd x
java -classpath TestPrivilegesS.jar TestPrivileges
java -classpath TestPrivileges.jar TestPrivileges
cd ..

vkeystore 快速介绍:

keytool -genkey -keystore vkeystore -keyalg rsa -dname "CN=MyCompany, OU=MyCompany, O=MyCompany, L=Atlanta, ST=GA,C=NL" -alias printer -validity 3600 -keypass My0Company -storepass My0Company

第一次运行工作正常(可能是因为类文件位于同一目录中)。然后我创建文件,一份已签名,另一份未签名。当我运行它们时,我得到了这些错误。请注意,这些 jar 位于一个单独的文件夹中,其中仅包含这些 jar,不包含类文件。

最佳答案

我同意安德鲁的观点。

我创建了一个应用程序,可以帮助我们找到代码签名问题。

https://gist.github.com/2596125

(因为我们不想向安德鲁发送垃圾邮件,所以我创建了这个。)

根据最终发布的更多信息,您似乎没有将 TestPrivileges$1 类与 jar 一起打包。

要解决此问题,请对 jar 打包执行此操作:

jar cvf TestPrivileges.jar TestPrivileges.class TestPrivileges$1.class

关于java - 在已签名的小程序中使用 AccessControler.doPrivileged 时出现 InvocableTargetException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10450956/

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