- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在小程序中有以下通过 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)
这是一个测试类:
请注意,调用其他方法不会引发此异常。
这是我编译和运行它的方法:
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/
我试图弄清楚一些遗留代码在做什么。这条线到底在做什么,为什么我需要这种方式? String lineSeparator = (String) java.security.AccessControlle
确实,在(签名的)小程序中,只有当我的小程序与 JavaScript 通信时,我才需要使用 AccessController.doPrivileged() ? 最佳答案 没有。如果不受信任的小程序访问
我设法用以下代码设置了一个“ Java沙箱”: // #1 new File("xxx").exists(); // #2 PrivilegedExceptionAct
我有这段代码,将 JavaServer 附加到 RMIRegistry,这是在 PrivilegedAction 中完成的 //start javaengineserver
如果我理解 AccessController.doPrivileged正确地说,不受信任的代码应该能够通过确实具有权限的中间方法调用需要权限的方法(例如System.getProperty())。 p
我是 Java 安全方面的新手;有一个基本问题。 我目前的理解是: 每当您需要限制不受信任的代码可以执行的操作时,实现此目的的方法之一是使用自定义安全策略,并在 Subject.doAsPrivile
例如,如果我在小程序类中使用此代码,请在小程序沙箱中运行它 public void init() { try { class doInit implements Privile
我正在尝试调用文件选择器选项并获取文件名作为输入。但是我得到了 java AccessControlException。当我使用网络浏览器启动小程序时,这工作正常,但在尝试使用小程序查看器时抛出异常。
我试图禁止在 AccessController.doPriviliged() 方法中创建线程。下面的方法创建并运行线程。我用 -Djava.security.manager 运行它。根据此链接,如果未
我在小程序中有以下通过 JavaScript 调用的方法 public String getAString() { Object rc = AccessController.d
我正在弄清楚如何在没有权限的情况下运行外部代码(来自不同的 JAR),这样它就不会损害我自己的系统。我几乎可以正常工作了,但是我发现了一个奇怪的情况,即调用 System.exit(0) 仍然会杀死整
我是java新手。我想在 Eclipse IDE 中运行一个简单的 hello world 应用程序。 public class Hello { public static void main
我正在查看一个被大量从 JavaScript 调用的签名 Applet。显然,与直接从 Java 内部启动的任何线程相比,源自 JavaScript 的线程受到更严格的沙箱化处理。例如,如果 Java
我正在尝试使用 Silverlight 进行一些归档并从 Javascript 访问结果。 Java 小程序可以通过 AccessController.doPrivileged 方法轻松完成此操作,例
我是一名优秀的程序员,十分优秀!