JNLP "JVM Shared, not allowed to set security manager" 错误
JNLP "JVM Shared, not allowed to set security manager" error
我有一个 JAVA 小程序来执行数字签名、证书验证等。它是用有效证书签名的,它有一个正确的清单(我想),其值为:
Permissions: all-permissions
Specification-Title: Applet Certificados digitales
Specification-Version: v1.3
Specification-Vendor: mycompany
Application-Name: Applet Java mycompany
而且,由于 NPAPI 友好的浏览器(仅在 Firefox 和 IExplorer 上测试),它完美地工作在 "applet" 标签中。已经 运行 这么多年了...
现在我想让 Chrome 和 Edge 用户使用它,通过使用 JNLP。
在这里几乎没问题。我说 "almost" 是因为我可以读取商店证书、访问我的 ASP.NET WebApi、执行数字签名....但现在我无法打开智能卡来读取证书,因为我设置时出现 SecurityException安全经理:
public SmartCardProvider_SecurityManager(final ApduConnection conn) {
super(NAME, VERSION, INFO);
defaultConnection = conn;
AccessController.doPrivileged(new PrivilegedAction<Void>() {
@Override
public Void run() {
if (!(System.getSecurityManager() instanceof SmartCardProvider_SecurityManager)) {
System.setSecurityManager(new SmartCardProvider_SecurityManager(System.getSecurityManager()));
// Exception -> JVM Shared, not allowed to set security manager
}
....
在哪里
private static final class SmartCardProvider_SecurityManager
extends SecurityManager { .....
这是我的 JNLP:
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="" href="thefile.JNLP">
<information>
<title>mycompany - JAVA apps</title>
<vendor>mycompany</vendor>
<homepage href="http:\www.mycompany.com" />
<description>the description</description>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.7+" href="http://java.sun.com/products/autodl/j2se"/>
<jar href="APPLET_NAME.jar" main="false" />
</resources>
<applet-desc documentBase=""
name="the_name"
main-class="myjavanamespace.clsApplet"
width="450"
height="250">
<param name="0123225223 ..... /> some ciphred params ...
<param name="permissions" value="all-permissions" />
</applet-desc>
我最后一次尝试是添加这个参数:
<param name="separate_jvm" value="true"/>
但我遇到了同样的异常。我没有想法,所以任何帮助将不胜感激。
当前运行环境:
Java 插件 11.72.2.15
使用 JRE 1.8。0_72-b15 Java HotSpot(TM) 64 位服务器虚拟机
我已将功能迁移到独立的 java 应用程序,使用 "the same" JNLP('application-desc' 而不是 'applet-desc' 和 'arguments' 或 'params nodes')。安全错误已消失。
我试图改变智能代码提供者,以了解这个问题的真正原因,但是,正如安德鲁汤普森所说,我同意,用小程序破坏更多的努力是没有价值的,因为他们将大约 2017 年 3 月停产。
到现在为止,我将保留我的旧小程序,同时新应用程序将投入生产。
我有一个 JAVA 小程序来执行数字签名、证书验证等。它是用有效证书签名的,它有一个正确的清单(我想),其值为:
Permissions: all-permissions
Specification-Title: Applet Certificados digitales
Specification-Version: v1.3
Specification-Vendor: mycompany
Application-Name: Applet Java mycompany
而且,由于 NPAPI 友好的浏览器(仅在 Firefox 和 IExplorer 上测试),它完美地工作在 "applet" 标签中。已经 运行 这么多年了...
现在我想让 Chrome 和 Edge 用户使用它,通过使用 JNLP。 在这里几乎没问题。我说 "almost" 是因为我可以读取商店证书、访问我的 ASP.NET WebApi、执行数字签名....但现在我无法打开智能卡来读取证书,因为我设置时出现 SecurityException安全经理:
public SmartCardProvider_SecurityManager(final ApduConnection conn) {
super(NAME, VERSION, INFO);
defaultConnection = conn;
AccessController.doPrivileged(new PrivilegedAction<Void>() {
@Override
public Void run() {
if (!(System.getSecurityManager() instanceof SmartCardProvider_SecurityManager)) {
System.setSecurityManager(new SmartCardProvider_SecurityManager(System.getSecurityManager()));
// Exception -> JVM Shared, not allowed to set security manager
}
....
在哪里
private static final class SmartCardProvider_SecurityManager
extends SecurityManager { .....
这是我的 JNLP:
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="" href="thefile.JNLP">
<information>
<title>mycompany - JAVA apps</title>
<vendor>mycompany</vendor>
<homepage href="http:\www.mycompany.com" />
<description>the description</description>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.7+" href="http://java.sun.com/products/autodl/j2se"/>
<jar href="APPLET_NAME.jar" main="false" />
</resources>
<applet-desc documentBase=""
name="the_name"
main-class="myjavanamespace.clsApplet"
width="450"
height="250">
<param name="0123225223 ..... /> some ciphred params ...
<param name="permissions" value="all-permissions" />
</applet-desc>
我最后一次尝试是添加这个参数:
<param name="separate_jvm" value="true"/>
但我遇到了同样的异常。我没有想法,所以任何帮助将不胜感激。
当前运行环境:
Java 插件 11.72.2.15
使用 JRE 1.8。0_72-b15 Java HotSpot(TM) 64 位服务器虚拟机
我已将功能迁移到独立的 java 应用程序,使用 "the same" JNLP('application-desc' 而不是 'applet-desc' 和 'arguments' 或 'params nodes')。安全错误已消失。
我试图改变智能代码提供者,以了解这个问题的真正原因,但是,正如安德鲁汤普森所说,我同意,用小程序破坏更多的努力是没有价值的,因为他们将大约 2017 年 3 月停产。
到现在为止,我将保留我的旧小程序,同时新应用程序将投入生产。