Java JNLP“;JVM共享,不允许设置安全管理器;错误
我有一个JAVA小程序来执行数字签名、证书验证等。它是用有效的证书签名的,它有一个正确的清单(我想),其值如下:Java JNLP“;JVM共享,不允许设置安全管理器;错误,java,applet,jnlp,securityexception,Java,Applet,Jnlp,Securityexception,我有一个JAVA小程序来执行数字签名、证书验证等。它是用有效的证书签名的,它有一个正确的清单(我想),其值如下: Permissions: all-permissions Specification-Title: Applet Certificados digitales Specification-Version: v1.3 Specification-Vendor: mycompany Application-Name: Applet Java mycompany 而且,由于NPAPI友好
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来使用它。
在这里,一切都很好。我说“几乎”是因为我可以阅读存储证书、访问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
}
....
这是我的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>
mycompany-JAVA应用程序
我的公司
描述
我已经将函数性迁移到一个独立的java应用程序,使用“相同”JNLP调用它(“application-desc”而不是“applet desc”,以及“arguments”insted或“params nodes”)。安全错误已经消失
我试图改变智能代码提供程序,以了解这个问题的真正原因,但是,正如安德鲁·汤普森所说,我同意,用小程序破坏更多的努力是毫无价值的,因为它们将于2017年3月4日停产
现在,我将保留我的旧小程序,同时新应用程序投入生产。我已将功能性迁移到一个独立的java应用程序,使用“相同”JNLP调用它(“application-desc”而不是“applet desc”,并使用“arguments”或“params nodes”)。安全错误已经消失
我试图改变智能代码提供程序,以了解这个问题的真正原因,但是,正如安德鲁·汤普森所说,我同意,用小程序破坏更多的努力是毫无价值的,因为它们将于2017年3月4日停产
现在,我将保留我的旧小程序,同时新应用程序开始生产。是否需要将此小程序嵌入网页?我怀疑在一个自由浮动(非嵌入式)小程序中获得一个单独的JVM会容易得多。@AndrewThompson嗨,事实上,当它嵌入到网页中时,我使用JSObject通过JS+Webmethod与服务器交互。这里一切都好。对于chrome和edge,它通过JNLP打开,然后使用ASP.NET WebApi。在这种情况下,也许我可以使用另一个“main”void在JFrame中打开它,例如(或者我必须放弃,并开发一个独立的java应用程序)?“我使用JSObject通过JS+Webmethod与服务器交互。”。要么将功能迁移到纯JS(如果可能的话,我建议这样做),要么使用功能更强大的桌面应用程序。它直接与web服务层通信。其他任何事情都是在浪费时间。@AndrewThompson很遗憾,因为例如用证书签名或读智能卡,用JS是不可能的。因此,现在是重做一切的时候了,比“弥补”要好。我非常感谢你的信息,我是一个网络开发者,我不知道java新闻!感谢是否需要将此小程序嵌入网页?我怀疑在一个自由浮动(非嵌入式)小程序中获得一个单独的JVM会容易得多。@AndrewThompson嗨,事实上,当它嵌入到网页中时,我使用JSObject通过JS+Webmethod与服务器交互。这里一切都好。对于chrome和edge,它通过JNLP打开,然后使用ASP.NET WebApi。在这种情况下,也许我可以使用另一个“main”void在JFrame中打开它,例如(或者我必须放弃,并开发一个独立的java应用程序)?“我使用JSObject通过JS+Webmethod与服务器交互。”。要么将功能迁移到纯JS(如果可能的话,我建议这样做),要么使用功能更强大的桌面应用程序。它直接与web服务层通信。其他任何事情都是在浪费时间。@AndrewThompson很遗憾,因为例如用证书签名或读智能卡,用JS是不可能的。因此,现在是重做一切的时候了,比“弥补”要好。我非常感谢你的信息,我是一个网络开发者,我不知道java新闻!谢谢
<?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"/>