正在阅读:编程必备经典:Java常见问题集锦编程必备经典:Java常见问题集锦

2004-10-28 18:17 出处:CSDN 作者:okdiy 责任编辑:linjixiong

  问: 
  如何产生签名applet,以使applet能够访问本地资源? 

  答: 
  在jdk1.1中,可以使用javakey命令来产生公钥,私钥,证书和签名的jar文件,详细资料 请参考: http://java.sun.com/security/usingJavakey.html而java 2对签名机制做了比较大的改进,允许用户更灵活地设置安全权限.Java 2提供了三个工具:keytool,policytool和jarsigner来实现签名applet.例如,Joe编写了一个签名applet:SignedApplet.java,那么产生一个简单的签名applet的过程如下: 

 


 //产生密钥,密钥别名为joe,口令为sign12,存放在密钥库joestore中 

  keytool -genkey -alias joe -keypass sign12 -keystore joestore 

  //将SignedApplet.class及相关文件打包成jar文件 

  jar cvf SignedAppletDemo.jar 

  //利用keytool生成的自签名的证书产生签名applet(jar文件) 

  jarsigner -keystore joestore -signedjar joe.jar SignedAppletDemo.jar joe 

  //将自签名证书从keystore中输出到文件 

  keytool -export -keystore joestore -alias joe -file joe.cer 

  而对于签名applet的接受方Susan,需要通过如下步骤来安全地执行 

  Joe编写的签名applet: 

  //得到Joe的证书并将之读入到密钥库中susanstore中 

  keytool -import -alias joe -file joe.cer -keystore susanstore 

  //运行policytool产生满足Susan要求的policy文件 

  policytool 

  //用appletviewer运行之,或在浏览器中安装java plugin来运行之. 

  关于签名applet在Java Plugin中的部署请参考以下网页: 

  http://java.sun.com/security/signExample12/ 

  注:以上的例子为简单起见,使用了keytool产生的自签名证书.其实,用户也可以 

  使用keytool -certreq向商业CA中心申请电子证书. 

  问: 
  若通过ObjectOutputStream向一个文件中多次以追加方式写入object,为什么用ObjectInputStream读取这些object时会产生StreamCorruptedException? 

  答: 
  使用缺省的serializetion的实现时,一个ObjectOutputStream的构造和一个ObjectInputStream的构造必须一一对应.ObjectOutputStream的构造函数会向输出流中写入一个标识头,而ObjectInputStream会首先读入这个标识头.因此,多次以追加方式向一个文件中写入object时,该文件将会包含多个标识头.所以用ObjectInputStream来deserialize这个ObjectOutputStream时,将产生StreamCorruptedException.一种解决方法是可以构造一个ObjectOutputStream的子类,并覆盖writeStreamHeader()方法.被覆盖后的writeStreamHeader()方法应判断是否为首次向文件中写入object,羰?则调用super.writeStreamHeader();若否,即以追加方式写入object时,则应调用ObjectOutputStream.reset()方法. 


察看评论详细内容 我要发表评论
作者笔名 简短内容 发表时间
:

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品