快速业务通道

基于Java 2运行时安全模型的线程协作 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-25

示例

我们的示例很简单:客户端调用 LogService 提供的 API,把 Message 写入到磁盘文件。

清单 1. 客户端程序

package sample.permtest.client; …… public class Client { …… public static void main(String[] args) { //构造消息日志,使用LogService将其写入c:\\paper\\client\\out.tmp文件。 Message message = new Message("c:\\paper\\client\\out.tmp", "Hi, this is called from client"+''\n''); LogService.instance.log(message); //构造消息日志,使用LogService将其写入c:\\paper\\server\\out.tmp文件。 message = new Message("c:\\paper\\server\\out.tmp", "Hi, this is called from client"+''\n''); LogService.instance.log(message); } }

清单 2. LogService

package sample.permtest.server; …… public class LogService { …… public void log(Message message) { final String destination = message.getDestination(); final String info = message.getInfo(); FileWriter filewriter = null; try  { filewriter = new FileWriter(destination, true); filewriter.write(info); filewriter.close(); } catch (IOException ioexception) { ioexception.printStackTrace(); } } }

基于Java 2运行时安全模型的线程协作(3)

时间:2009-11-09 IBM 李三红

如清单 1、2 所示,这就是一个普通的 Java 应用程序。我们把这个程序放在 Java 的安全模型中执行。Client 类放在 client.jar JAR 包里,而 LogService 类放在 server.jar JAR 包里

首先我们使用 keytool 工具来生成我们需要的 keystore 文件,以及需要的数字证书,如清单 3 所示。

清单 3. 生成 keystore 文件及其数字证书

>keytool -genkey -alias client -keyalg RSA -keystore C:\paper\.keystore >keytool -genkey -alias server -keyalg RSA -keystore C:\paper\.keystore

在清单 3 中,我们生成了 C:\paper\.keystore 文件,使用 RSA 算法生成了别名为 client 与 server 的两个数字证书。(注 : 为方便起见,keystore 与 client,server 证书的密钥都是 111111)

我们使用如清单 4 所示的命令来签名 client.jar 与 server.jar。

清单 4. 签名 JAR 文件

>jarsigner.exe -keystore C:\paper\.keystore -storepass 111111 c:\paper\client.jar client >jarsigner.exe -keystore C:\paper\.keystore -storepass 111111 c:\paper\server.jar server

在清单 4 中,我们使用了别名为 client 的数字证书来签名 client.jar 文件,使用别名为 server 的数字证书来签名 server.jar 文件。

使用图形化的工具 policytool.exe 创建清单 5 所示的 Policy 文件。

清单 5. Policy 文件

/* AUTOMATICALLY GENERATED ON Thu May 14 15:40:25 CST 2009*/ /* DO NOT EDIT */ keystore "file:////C:/paper/.keystore"; grant signedBy "client" { permission java.io.FilePermission "c:\\paper\\client\\*","read,write"; }; grant signedBy "server" { permission java.security.AllPermission; }; 

Policy 文件指出,所有被”client”签名的代码具有读写” c:\\paper\\client\\”目录下所有文件的权限,而所有被”server”签名的代码具有所有的权限。Java 将根据该策略文件按照签名者创建相应的保护域。

一切就绪,我们运行代码,如清单

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号