JNLP文件服务拒绝访问本地文件

时间:2014-02-16 07:49:06

标签: java applet java-web-start jnlp fileopendialog

我正在尝试编写一个小的Java小程序来读取用户浏览历史记录。因此,我需要做的就是读取用户本地文件系统上的文件。

虽然我没有成功。当我尝试使用JNLP API的ExtendedService openFile()时,getInputStream()失败并出现IOException。我尝试使用FileOpenService openFileDialog(),但是当对话框打开时,目录显示为空或者具有不可访问的图标。

此处的屏幕打印:http://timewitnesser.com/publisher/screenshot1.png和此处http://timewitnesser.com/publisher/screenshot2.png

我如何构建和部署它的一些细节:我基本上遵循Java applet的部署指南:docs.oracle.com/javase/tutorial/deployment/applet/deployingApplet.html

  • 我使用jnlp文件启动applet。我尝试将安全性设置为所有权限或未指定。这是jnlp文件的代码:

    <?xml version="1.0" encoding="UTF-8"?>
    <jnlp spec="1.0+" codebase="" href="">
        <information>
            <title>History Reader</title>
            <vendor>QualityWeb</vendor>
        </information>
        <resources>
            <j2se version="1.7+"
                href="http://java.sun.com/products/autodl/j2se" />
            <jar href="HistoryReaderApplet.jar" main="true" />
        </resources>
        <security>
            <all-permissions/>
        </security>
        <applet-desc 
             name="History Reader Applet"
             main-class="historyreaderapplet.HistoryReaderApplet"
             width="300"
             height="300">
         </applet-desc>
         <update check="background"/>
    </jnlp>
    
  • 在我的html页面中,我使用以下代码启动它:

    <script src="https://www.java.com/js/deployJava.js"></script>
    <script> 
    var attributes = {
       code:'historyreaderapplet.HistoryReaderApplet',  width:300, height:300} ; 
    var parameters = {jnlp_href: 'historyreader_applet.jnlp'} ; 
    deployJava.runApplet(attributes, parameters, '1.7');
    </script>
    
  • 我使用jar命令构建jar,包括一个清单,其中我指定了java指南中提到的3行,包括“Permission one”。我使用的命令是jar cvfm HistoryReaderApplet.jar mymanifest.txt historyreaderapplet

  • 我使用jarsigner签署jar,虽然我自己使用keytool生成了我的密钥,但我没有证书颁发机构签署的证书
  • 我甚至试图将我的本地java机器安全设置设置为中等,并且已将我的域添加到可信域列表中。
  • 我尝试过从本地服务器运行页面,然后上传到远程服务器
  • 当我运行该页面时,它会提示授权框,我允许该应用程序。当我在沙箱模式下运行时,当它到达fileopendialog时,它再次提示我是否要授权应用程序在本地文件系统上进行读写,我这样做。但即使有了所有这些确认,也无效。

知道可能是什么问题吗?

编辑:这是Janela的报告,我只包括红色部分:

cvc-complex-type.2.4.a: Invalid content was found starting with element 'security'. One of '{resources, application-desc, applet-desc, component-desc, installer-desc}' is expected.
cvc-complex-type.2.4.a: Invalid content was found starting with element 'security'. One of '{resources, application-desc, applet-desc, component-desc, installer-desc}' is expected.
Codebase '' is a malformed URL!  Defaulting to http://timewitnesser.com/publisher/historyreader_applet.jnlp
Codebase '' is a malformed URL!  Defaulting to http://timewitnesser.com/publisher/historyreader_applet.jnlp
Codebase '' is a malformed URL!  Defaulting to http://timewitnesser.com/publisher/historyreader_applet.jnlp
Codebase '' is a malformed URL!  Defaulting to http://timewitnesser.com/publisher/historyreader_applet.jnlp

在我看来,第一行可能是原因,但我不理解它们。是不是“安全”标签应该是jnlp标签的直接子项?

0 个答案:

没有答案