Java JNLP“;JVM共享,不允许设置安全管理器;错误

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友好

我有一个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来使用它。 在这里,一切都很好。我说“几乎”是因为我可以阅读存储证书、访问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"/>