代码之家  ›  专栏  ›  技术社区  ›  Casey

Webstart安全是不可能的。尝试与玻璃鱼4一起使用

  •  -3
  • Casey  · 技术社区  · 10 年前

    最终目标是使用Glassfish 4中的Java webstart提供应用程序客户端下载。

    我已经尝试了三天,研究了我能找到的所有方法,无论我尝试了什么,网络启动都被阻止了。

    • 异常列表。不起作用。
    • 将证书添加为受信任的证书。不起作用。
    • 不需要任何权限的沙盒。不起作用。
    • 更新Java。不起作用。
    • 我似乎找不到部署规则集选项,但这听起来像是需要完全的windows服务器集成等。
    • 在Java控制台安全设置中没有介质选项,因为我使用的是Java 8.0.31。
    • 简单的测试应用程序,除了将消息打印到命令行的静态主void外,什么都没有。无法使其工作。。。

    使用webstart开发任何东西都是不可能的,这开始让我疯狂,我能看到的唯一选择是购买证书用于本地开发或完全放弃webstart。。。

    How I added the certifacte to my machine -证书显示在我的Java控制台中。

    下面是我无法开始工作的简单场景:

    package com.cbprogramming;
    
    import javafx.application.Application;
    import javafx.stage.Stage;
    
    public class Main extends Application {
        @Override
        public void start(Stage primaryStage) throws Exception {
            System.out.println("Test");
        }
    
    
        public static void main(String[] args) {
            launch(args);
        }
    }
    

    然后,我使用IntelliJ Idea创建了一个JavaFX应用程序,该应用程序将其打包,包括webstart jar文件、JNLP文件和html网页,其中包括用于权限的自定义清单字段:沙盒和代码库。

    在JNLP文件中,我还尝试了安全和权限标签,包括所有权限和沙盒。

    <?xml version="1.0" encoding="utf-8"?>
    <jnlp spec="1.0" xmlns:jfx="http://javafx.com" href="WebstartTest.jnlp">
      <information>
        <title>Webstart Test</title>
        <vendor>Testing</vendor>
        <description>A Java Webstart testing app</description>
        <offline-allowed/>
      </information>
      <resources>
        <jfx:javafx-runtime version="8.0+" href="http://javadl.sun.com/webapps/download/GetFile/javafx-latest/windows-i586/javafx2.jnlp"/>
      </resources>
      <resources>
        <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
        <jar href="WebstartTest.jar" size="1190" download="eager" />
      </resources>
    <security>
      <all-permissions/>
    </security>
      <applet-desc  width="600" height="400" main-class="com.javafx.main.NoJavaFXFallback"  name="WebstartTest" >
        <param name="requiredFXVersion" value="8.0+"/>
      </applet-desc>
      <jfx:javafx-desc  width="600" height="400" main-class="com.test.Main"  name="WebstartTest" />
      <update check="background"/>
    </jnlp>
    

    以及清单文件:

    Manifest-Version: 1.0
    permissions: sandbox
    codebase: file:///d:/test/
    JavaFX-Version: 8.0
    Class-Path: 
    Created-By: JavaFX Packager
    Main-Class: com.test.Main
    
    Name: com/test/Main.class
    SHA-256-Digest: 8BK5m/ojirCK/QEx8Oe+9z/L6P8JXin0CMDK4R2mkAI=
    

    我已经将jnlp、jar和html文件添加到异常列表中,我已经尝试过使用file://和file:///,我也尝试过将glassfish URL添加到例外列表中,http和https。。。

    我正在使用Jdk 8.0.31开发Win 8.1 pro机器。

    我读过的每个论坛都有用户表示,这些选项中的任何一个都可以解决他们的问题。我做错了什么?!?8.0.31坏了吗?还是webstart不值得使用?

    1 回复  |  直到 10 年前
        1
  •  0
  •   Casey    10 年前

    这是我发现的,以防其他人发现它有用。

    在使用Java7更新25或更高版本(当前为8.0.31)时,Glassfish 4.1似乎有一个webstart bug。解决方法是使用较旧版本的Java。

    • 我始终无法使java控制台异常列表工作。
    • 将证书添加为可信证书可以让webstart从本地文件/html文件运行,但它仍然无法通过glassfish运行。
    • 现在需要从jnlp文件中删除标记,因为它们在jar清单文件中,或者应用程序被阻止,这些标记由glassfish和intellijJavaFX打包器自动添加。
    • 另一个想法是设置一个本地证书颁发机构,并通过java控制台将其添加为可信证书,这样它就不是一个自签名证书。

    此外,要在IntelliJ中调试glassfish应用程序客户端,请执行以下操作:

    • 创建批处理文件: start "name" cmd /c "<installdir>\glassfish\bin\appclient.bat -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -client <dir>\TEMPSClient.jar"
    • 创建远程调试配置,并将其设置为使用启动前部分中的外部工具运行创建的脚本。

    这将使用默认端口等进行远程调试,并将在将调试器附加到glassfish客户端容器之前运行该应用程序jar。要获得控制台输出,请将stdout和stderr重定向到日志文件,并将日志文件附加到远程调试配置。

    我第一次尝试使用嵌入式ACC,但无法正常工作(从文档复制/粘贴功能甚至不存在…)。如果有人知道使用嵌入式ACC的好教程,那将是非常好的。