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

时间:2016-02-05 11:28:52

标签: java applet jnlp securityexception

我有一个JAVA Applet来执行数字签名,证书验证等。它使用有效证书签名,它有一个正确的Manifest(我猜),其值为:

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
            }
.... 

其中

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位服务器VM

1 个答案:

答案 0 :(得分:0)

我已将功能迁移到一个独立的Java应用程序,并使用&#34;同样的&#34; JNLP(&#39; application-desc&#39;而不是&#39; applet-desc&#39;和&#39;参数&#39; insted或&#39; params节点&#39;)。安全错误已经消失。

我试图改变智能代码提供商,以获得这个问题的真正原因,但是,正如Andrew Thompson所说,并且我同意,使用applet破坏更多努力是毫无价值的,因为它们是将于2017年3月停产aprox。

到现在为止,我将保留我的旧applet,同时新应用程序将进入Production。