清单 1. 一个典型的策略文件 // Grant these permissions to code loaded from a sample.jar file // in the C drive and if it is signed by XYZ grant codebase "file:/C:/sample.jar", signedby "XYZ" { // Allow socket actions to any host using port 8080 permission java.net.SocketPermission "*:8080", "accept, connect, listen, resolve"; // Allows file access (read, write, execute, delete) in // the user′s home Directory. Permission java.io.FilePermission "${user.home}/-", "read, write, execute, delete"; };
Public void someMethod() { Permission permission = new java.net.SocketPermission("localhost:8080", "connect"); AccessController.checkPermission(permission); // Sensitive code starts here Socket s = new Socket("localhost", 8080); }
许可权 赋予 CodeSource 许可权并不一定意味着答应所暗示的操作。要使操作成功完成,调用栈中的每个类必须有必需的许可权。换句话说,假如您将 java.io.FilePermission 赋给类 B,而类 B 是由类 A 来调用,那么类 A 必须也有相同的许可权或者暗示 java.io.FilePermission 的许可权。
// Example grant entry grant codeBase "file:/C:/sample.jar", signedby "XYZ", principal com.ibm.resource.security.auth.PrincipAlexample "admin" { // Allow socket actions to any host using port 8080 permission java.net.SocketPermission "*:8080", "accept, connect, listen, resolve"; // Allows file access (read, write, execute, delete) in // the user′s home directory. Permission java.io.FilePermission "${user.home}/-", "read, write, execute, delete"; };
清单 4. 一个简单的授权请求 public class JaasExample { public static void main(String[] args) { ... // where authenticatedUser is a Subject with // a PrincipalExample named admin. Subject.doAs(authenticatedUser, new JaasExampleAction()); ... } }
public class JaasExampleAction implements PrivilegedAction { public Object run() { FileWriter fw = new FileWriter("hi.txt"); fw.write("Hello, World!"); fw.close(); } }
为了更结合实际地学习 JAAS,请参阅 Thomas Owusu 的“Enhance Java GSSAPI with a login interface using JAAS”(developerWorks,2001 年 11 月)
“Single Sign On Support in WebSphere Portal Server 1.2”讨论了 WebSphere Portal Server 的 JAAS 实现并展示了如何抽取用户数据并将其提供给一个 portlet 的后端应用程序,或者提供给同一个安全性域中的另一个 WebSphere Application Server。
假如您想深入了解 IBM 在 Java 安全性的发展中所起的历史性作用,请参阅文章“The evolution of Java security”,在这篇文章中 IBM 工程师讨论了 JDK 1.2 安全性模型的优缺点。
您将在 IBM developerWorks Java 技术专区找到数百篇关于 Java 编程各个方面的文章。
关于作者 Carlos Fonseca 目前是 IBM Research 的软件工程师,他已经做了 10 年的专职软件开发工作。他开始是从事 C 和 Visual Basic 编程,然后转向 C++ 编程。在最近六年中,Carlos 致力于面向对象的设计和使用 Java 平台进行开发,把他的专业技术应用于从 Swing GUI 单机应用程序到使用 J2EE 的服务器端应用程序等项目。当 Carlos 不再从事专业软件开发时,他还喜欢把编程作为业余爱好。您可以通过 cafonseca@us.ibm.com 与 Carlos 联系。