`
stephen830
  • 浏览: 2964441 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

applet-数字签名-访问windows注册表

    博客分类:
  • java
阅读更多
★★★ 本篇为原创,需要引用转载的朋友请注明:《 http://stephen830.iteye.com/blog/254549 》 谢谢支持! ★★★

本篇将讲述2个问题:
(1)applet如何进行数字签名?
(2)applet如何访问本地的windows注册表?

applet作为java唯一的一种运行在浏览器客户端的小程序,在项目中有时候也会起到很关键的作用。applet如果需要访问一些本地资源(这是指客户终端电脑中的资源),那么该applet必须要经过数字签名,而且客户在使用applet前必须接受你设定的数字签名,这样applet才允许访问你所需要的本地资源,比如访问本地的注册表。

(1)如何进行数字签名?
首先将你写好的applet生成jar包,如果用的是eclipse的话,你可以直接用eclipse的Export菜单将写好的applet生成一个jar文件。具体方法如下图:







这样子就生成jar文件了。

接下来就要对jar文件进行数字签名了。首先打开一个dos窗口,进入到你安装的jdk目录下的bin目录。运行下面的命令:
keytool -genkey -alias loginKey -keystore mylogin.key

按照命令出现的提示依次回答,其中第1项是要求输入密码,这个必须记下来,等下会用到的。


当完成上面的操作后,就可以在这个bin目录中看到一个签名文件mylogin.key,然后把jar文件复制到bin目录下,再执行下面的命令:
jarsigner -keystore mylogin.key login.jar loginKey
其中的[mylogin.key]和[loginKey]分别是前面keytool命令中的[mylogin.key]和[loginKey],login.jar就是你的jar文件名。
命令运行后,会要求你输入前面设置的密码。


这样,你的jar文件就经过数字签名了。然后把签名后的jar文件复制到你的前台展示html页面的同一个目录下,将applet嵌在html页面中。
<applet archive="login.jar" code="com.soft4j.Login.class" codebase="." name=Login style="HEIGHT: 40px; WIDTH: 500px; border:1px solid #CCC;" ></applet>


当客户打开你的html页面时会弹出一个要求接受数字签名证书的对话框。

(2)如何访问本地的windows注册表?
applet访问本地windows注册表是有限制的,只能对[HKEY_CURRENT_USER\Software\JavaSoft\Prefs]下面的进行操作。其余的一概不允许操作。

package com.soft4j;
import java.applet.Applet;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import java.util.prefs.Preferences;

import javax.swing.JButton;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

/*
 * Created on 2006-3-20
 * Author stephen
 * Email zhoujianqiang AT gmail DOT com
 * CopyRight(C)2005-2008 , All rights reserved.
 */

/**
 * 
 * @author stephen

 * @version 1.0.0
 * 
 */
public class Login extends Applet implements ActionListener{
    /*
     * applet 签名步骤:
     * 1.生成jar文件
     * jar命令
     * 2.生成key
     * keytool -genkey -alias key名字 -keystore key文件名

     * 3.签名jar文件
     * jarsigner -keystore key文件名 login.jar key名字
     */

    /**
     * 构造方法

     */
    public Login() {
        super();
    }
    
    JTextField userName = null;
    JPasswordField userPass = null;
    String key = null;
    Label l1, l2;
    JButton button = null;
    
    /**
     * 初始化

     */
    public void init()
    {
        
        l1 = new Label("姓名:");
        l2 = new Label("密码:");
        userName = new JTextField(10);
        userPass = new JPasswordField(10);
        button = new JButton("登录");
        add(l1);
        add(userName);
        add(l2);
        add(userPass);
        add(button);
        userName.addActionListener(this);
        userPass.addActionListener(this);
        button.addActionListener(this);
    }

    /**
     * 动作事件
     */
    public void actionPerformed(ActionEvent e) {
        URL url = null;
        StringBuffer theUrl = new StringBuffer();
        try {
            Preferences prefsdemo = Preferences.userRoot().node("/fileds");//读取数据 HKEY_CURRENT_USER\Software\JavaSoft\Prefs\fileds
            key = prefsdemo.get("key1",null);//读取数据 HKEY_CURRENT_USER\Software\JavaSoft\Prefs\fileds下的key为key1的值
            if(this.getParameter("url")==null || "".equals(this.getParameter("url"))){
                URL srcUrl = null;
                srcUrl = this.getDocumentBase();
                theUrl.append(srcUrl.getProtocol());
                theUrl.append("://");
                theUrl.append(srcUrl.getAuthority());
                String path = srcUrl.getPath();
                int len = path.lastIndexOf("/");
                path= path.substring(0,len+1);
                theUrl.append(path);
            }else{
                theUrl.append(this.getParameter("url"));
            }
            theUrl.append("l");//其中l是WEB应用中设置的servlet
            theUrl.append("?l=");
            theUrl.append(userName.getText());
            theUrl.append(",");
            theUrl.append(userPass.getPassword());
            theUrl.append(",");
            theUrl.append(key);
            url = new URL(theUrl.toString());
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        this.getAppletContext().showDocument(url);
    }

}


把applet、数字证书签名、访问本地windows注册表结合起来,把用户的登录和注册表结合起来,进行双重认证,相对更加安全一点。





















  • 大小: 15.8 KB
  • 大小: 16.7 KB
  • 大小: 23.2 KB
  • 大小: 18.2 KB
  • 大小: 20.5 KB
  • 大小: 12.6 KB
  • 大小: 20.6 KB
  • 大小: 3.1 KB
1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics