编写:桂静秋
参考: http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/contents.html
前言
项目需要,所以前几天研究了一下,折腾了我1.5天的时间,不能浪费,特此写出来share大家。
应用
JWS主要应用在发布应用程序上,主要写好了jnlp文件,用户通过http访问到,应用程序会自动安装在本地机器,今后升级等工作JWS将自动完成。可以说是发布软件的一种新方式。(当然,前提对方必须有jvm)
实施步骤
编写好一个测试文件,并且打成hello.jar包
此应用在点JButton的时候测试写本地文件系统和使用本地网络资源。(编译和打包过程省略)
接着,也是我折腾了一天的事情,如何把此jar进行证书认证,使得此应用安装到用户那可以操作本地资源。原来我使用jdk的keytool工具生成证书,但是只可用半年,后来考虑去官方申请一个,居然要800$/年。最后考虑用openssl自己做,但是过程相当复杂,而且没法很好的控制流程,主要是对openssl命令不太熟悉用途。折腾了一天,终于发现原来java自己就可以生成使用限期自定义的证实。哎...
生成一个新的keystore
keytool-genkey-keystoremyKeystore-aliasmyself
生成一个私证书
keytool-selfcert-aliasmyself-keystoremyKeystore-validity365
注意-validity365为证书使用期限,为1年,可以自己定义更大。
对jar进行签名
jarsigner-keystoremyKeystorehello.jarmyself
这样签名工作就完成了。最后写个jnlp描述文件hello.jnlp
我这里把jar和jnlp都放在192.168.1.6的主机上面,并且通过81port进行访问。你可以更加自己的需要修改上面的相关信息。
测试一下。http://192.168.1.6:81/jnlp/hello.jnlp用ie打开,马上会弹出一个你是否接受的筐,并且说明这个个人或者公司是不可信的(就因为不是权威机构申请的证书,哎),点接受后就可以正常运行jar中的程序,可以正常使用本地功能。
同样,applet经过上面步骤也可以操作本地,就好比经过签名的activeX一样,也好比一部分ie自己认为已经签名的activeX一样(其实就是系统漏洞,呵呵),请大家批评指正。
参考: http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/contents.html
前言
项目需要,所以前几天研究了一下,折腾了我1.5天的时间,不能浪费,特此写出来share大家。
应用
JWS主要应用在发布应用程序上,主要写好了jnlp文件,用户通过http访问到,应用程序会自动安装在本地机器,今后升级等工作JWS将自动完成。可以说是发布软件的一种新方式。(当然,前提对方必须有jvm)
实施步骤
编写好一个测试文件,并且打成hello.jar包
- //FileHelloJNLP.java
- importjavax.swing.*;
- importjava.awt.*;
- importjava.awt.event.*;
- importjava.io.*;
- importjava.net.*;
- publicclassHelloJNLPextendsJFrameimplementsActionListener{
- /**
- *
- */
- privatestaticfinallongserialVersionUID=1L;
- publicHelloJNLP(){
- super("HelloJNLP");
- StringloadedFrom=this.getClass().getClassLoader().toString();
- JLabeljl=newJLabel("loadedby"+loadedFrom);
- JEditorPanejtp=newJEditorPane("text/plain","版本1.1.2");
- JButtonbb=newJButton("writenativefile");
- getContentPane().add(jl,BorderLayout.NORTH);
- getContentPane().add(jtp,BorderLayout.CENTER);
- getContentPane().add(bb,BorderLayout.SOUTH);
- bb.addActionListener(this);
- bb.setActionCommand("wnf");
- }
- publicstaticvoidmain(String[]args){
- JFramef=newHelloJNLP();
- f.setBounds(100,100,325,250);
- f.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
- f.setVisible(true);
- f.addWindowListener(newWindowAdapter(){
- publicvoidwindowClosed(WindowEvente){
- System.out.println("Shuttingdown...");
- System.exit(0);
- }
- });
- }
- publicvoidactionPerformed(ActionEventarg0){
- //System.out.println(arg0.getActionCommand());
- try{
- FileOutputStreamfos=newFileOutputStream("abcfile");
- try{
- fos.write(0xffff);
- fos.close();
- System.out.println("writefileok");
- }catch(IOExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- }catch(FileNotFoundExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- try{
- Socketsock=newSocket(InetAddress.getByName("www.cctv.com"),80);
- sock.close();
- System.out.println("socketcreateok");
- }catch(UnknownHostExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }catch(IOExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- }
- }
此应用在点JButton的时候测试写本地文件系统和使用本地网络资源。(编译和打包过程省略)
接着,也是我折腾了一天的事情,如何把此jar进行证书认证,使得此应用安装到用户那可以操作本地资源。原来我使用jdk的keytool工具生成证书,但是只可用半年,后来考虑去官方申请一个,居然要800$/年。最后考虑用openssl自己做,但是过程相当复杂,而且没法很好的控制流程,主要是对openssl命令不太熟悉用途。折腾了一天,终于发现原来java自己就可以生成使用限期自定义的证实。哎...
生成一个新的keystore
keytool-genkey-keystoremyKeystore-aliasmyself
生成一个私证书
keytool-selfcert-aliasmyself-keystoremyKeystore-validity365
注意-validity365为证书使用期限,为1年,可以自己定义更大。
对jar进行签名
jarsigner-keystoremyKeystorehello.jarmyself
这样签名工作就完成了。最后写个jnlp描述文件hello.jnlp
- <?xmlversion="1.0"encoding="UTF-8"?>
- <!--fileHello.jnlp-->
- <jnlpcodebase="http://192.168.1.6:81/jnlp/"
- href="http://192.168.1.6:81/jnlp/hello.jnlp">
- <information>
- <title>Hello</title>
- <vendor>TechTipsSampleMay2001</vendor>
- <iconhref="/jnlp/qq.jpg"/>
- </information>
- <resources>
- <j2seversion="1.3+"/>
- <jarhref="/jnlp/hello.jar"/>
- </resources>
- <security>
- <all-permissions>
- </security>
- <application-descmain-class="HelloJNLP"/>
- </jnlp>
我这里把jar和jnlp都放在192.168.1.6的主机上面,并且通过81port进行访问。你可以更加自己的需要修改上面的相关信息。
测试一下。http://192.168.1.6:81/jnlp/hello.jnlp用ie打开,马上会弹出一个你是否接受的筐,并且说明这个个人或者公司是不可信的(就因为不是权威机构申请的证书,哎),点接受后就可以正常运行jar中的程序,可以正常使用本地功能。
同样,applet经过上面步骤也可以操作本地,就好比经过签名的activeX一样,也好比一部分ie自己认为已经签名的activeX一样(其实就是系统漏洞,呵呵),请大家批评指正。
3630

被折叠的 条评论
为什么被折叠?



