实战[jnlp]权限

上一篇 / 下一篇  2009-05-21 14:54:47 / 个人分类:java知识

第一次要用jnlp就闹出了不少问题,真郁闷了老长时间.
     苦战baidu,终于左弄右弄被我驯服了.
     problem.1
     第一次试jnlp就出现了错误,那个错误报什么忘了,反正要是使用jnlp调用的jar程序不需要对本地系统上的文件做读写操作时候就把
<security>

<all-permissions/>

</security>
这三行代码去掉就行了.
     problem.2
     真正难题就是这个,当jnlp调用的jar程序需要对本地系统的文件做读写操作的时候就需要做如下的步骤(我知道的解决方法):
说明,我用jnlp调用的文件名为:myreport.jar
(1)为jar文件签名.
先cd到myreport.jar所在的目录
执行:
keytool -genkey -keystore fox.report -alias fox

接下来它会问一些问题包括keystore的密码,key的密码等,如下所示:

输入keystore密码: 123456

您的名字与姓氏是什么?

[Unknown]: jingle

您的组织单位名称是什么?

[Unknown]: nankai

您的组织名称是什么?

[Unknown]: c2

您所在的城市或区域名称是什么?

[Unknown]: tj

您所在的州或省份名称是什么?

[Unknown]: tj

该单位的两字母国家代码是什么

[Unknown]: CN

CN=jingle, U=nankai, O=c2, L=tj, ST=tj, C=CN 正确吗?

[否]: y

输入<mykey>的主密码

         (如果和 keystore 密码相同,按回车): keypass



执行:

keytool -export -keystore fox.report -alias fox -file fox.cer

接下来它会要求你输入keystore密码:,如下所示:

输入keystore密码: 123456

保存在文件中的认证<fox.cer>



执行:

jarsigner -keystore fox.report myreport.jar fox

跟着提示你输入密码:

Enter Passphrase for keystore: 123456

Warning: The signer certificate will expire within six months.

/*****    签证完成 *****/

运行上面程序所生成的文件都放到和jar的同一级目录里面,我做的时候多点击了那个fox.cer签证,把签证加入了系统.

(2)修改客户端 policy文件,开方权限.

更改${JAVA_HOME}/jre1.5.0/lib/security/java.policy

和${JAVA_HOME}/jdk1.5.0/jre/lib/security/java.policy

(至于是不是两个文件都得改,我就不试了)



grant {

}

代码里面加入需要的权限代码,

对应我所做的jar需要提供如下的权限,

// MODIFY fox add

permission java.io.FilePermission "<<ALL FILES>>", "read";

permission java.util.PropertyPermission "user.dir","read,write";

permission java.util.PropertyPermission "user.home","read,write";

permission java.util.PropertyPermission "mrj.version","read";

具体要提供什么权限,可以根据所保的access denied来加.

permission java.io.FilePermission "<<ALL FILES>>", "read";

话应该都需要.



(3)修改*.jnlp文件.

这次就得加上权限了,三句话:

<security>

<all-permissions/>

</security>

over,这样就ok了.

/************ 记录下这次的文件 **************/

my.jnlp



<?xml version="1.0" encoding="UTF-8"?>

<jnlp spec="1.0+" codebase="http://localhost:8081/upload" href="my.jnlp">

<information>

<title>Fox jnlp</title>

<vendor>XXX Corporation</vendor>

<description>MyIE just demo how to program with jnlp.</description>

<homepage href="http://localhost:8081" />

<icon href="./../images/rookie.gif"/>

<icon kind="splash" href="./../images/logo.gif"/>

<offline-allowed/> 

<security>

<all-permissions/>

</security>

</information>

<resources>

<j2se version="1.3+"/>

<jar href="finerreport.jar"/>

</resources>

<application-desc main-class="com.vanda.report.ZDesigner"/>

</jnlp>



java.policy



// Standard extensions get all permissions by default

grant codeBase "file:${{java.ext.dirs}}/*" {

permission java.security.AllPermission;

};

// default permissions granted to all domains

grant { 

// Allows any thread to stop itself using the java.lang.Thread.stop()

// method that takes no argument.

// Note that this permission is granted by default only to remain

// backwards compatible.

// It is strongly recommended that you either remove this permission

// from this policy file or further restrict it to code sources

// that you specify, because Thread.stop() is potentially unsafe.

// See "http://java.sun.com/notes" for more information.

permission java.lang.RuntimePermission "stopThread";

// allows anyone to listen on un-privileged ports

permission java.net.SocketPermission "localhost:1024-", "listen";

// "standard" properies that can be read by anyone

permission java.util.PropertyPermission "java.version", "read";

permission java.util.PropertyPermission "java.vendor", "read";

permission java.util.PropertyPermission "java.vendor.url", "read";

permission java.util.PropertyPermission "java.class.version", "read";

permission java.util.PropertyPermission "os.name", "read";

permission java.util.PropertyPermission "os.version", "read";

permission java.util.PropertyPermission "os.arch", "read";

permission java.util.PropertyPermission "file.separator", "read";

permission java.util.PropertyPermission "path.separator", "read";

permission java.util.PropertyPermission "line.separator", "read";



// MODIFY fox add

permission java.io.FilePermission "<<ALL FILES>>", "read";

permission java.util.PropertyPermission "user.dir","read,write";

permission java.util.PropertyPermission "user.home","read,write";

    permission java.util.PropertyPermission "mrj.version","read";

permission java.util.PropertyPermission "java.specification.version", "read";

permission java.util.PropertyPermission "java.specification.vendor", "read";

permission java.util.PropertyPermission "java.specification.name", "read";

permission java.util.PropertyPermission "java.vm.specification.version", "read";

permission java.util.PropertyPermission "java.vm.specification.vendor", "read";

permission java.util.PropertyPermission "java.vm.specification.name", "read";

permission java.util.PropertyPermission "java.vm.version", "read";

permission java.util.PropertyPermission "java.vm.vendor", "read";

permission java.util.PropertyPermission "java.vm.name", "read";

};



在动态生成jnlp的问题上.要是用struts框架,需要在action上这样处理:

(如果tomcat版本老还得去配置conf/web.xml,加上

<mime-mapping>

<extension>jnlp</extension>

<mime-type>application/x-java-jnlp-file</mime-type>

</mime-mapping>)



PrintWriter ut = response.getWriter();

     response.setContentType("application/x-java-jnlp-file");

     out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");

     out.println("<jnlp spec=\"1.0+\" codebase=\"http://localhost\" href=\"report/jnlp/openFile.do\">");

     out.println("<information>");

     out.println("<title>JNLP</title>");

     out.println("<vendor>Hust</vendor>");

     out.println("<homepage href=\"\"/>");

     out.println("<description>Web Start</description>");

     out.println("</information>");

     out.println("<security>");

     out.println("</security>");

     out.println("<resources>");

     out.println("<j2se version=\"1.3+\"/>");

     out.println("<jar href=\"finereport.jar\"/>");

     out.println("</resources>");

     out.println("<application-desc main-class=\"com.vanda.report.ZDesigner\">");

     out.println("</application-desc>");

     out.println("</jnlp>");

out.flush();

TAG:

 

评分:0

我来说两句

日历

« 2024-06-02  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

  • 访问量: 58884
  • 日志数: 89
  • 建立时间: 2008-12-13
  • 更新时间: 2010-01-13

RSS订阅

Open Toolbar