JAAS的quick start


前言:维护使用Java编写的应用程序的安全,我们可以使其运行在安全管理器的保护之下,防止无意造成的系统故障。

1. 首先尝试一下基于Policy的授权的感觉吧。(热身)

先写一个简单程序PrintUserHome
import java.io.File;
import java.io.FileInputStream;

public class PrintUserHome {
    
public static void main(String[] args) throws Exception {
        System.out.println(System.getProperty(
"user.home"));
    }
}

直接运行可以打印出用户的主目录.
如果在安全管理器下运行。使用java -Djava.security.manager PrintUserHome
则会打出如下信息:

Exception in thread "main" java.security.AccessControlException: access denied (java.util.
PropertyPermission user.home read)

缺省安全策略运行的缺省安全管理器禁止访问user.home属性

接着,编写一个Policy文件,比如在C盘的根目录下创建javasecurityjaas.policy,内容如下:

grant {
     permission java.util.PropertyPermission "user.home", "read";
};

然后使用命令程序
Java -Djava.security.manager -Djava.security.policy=C:"javasecurityjaas.policy PrintUserHome

则会正常输出结果.

另外,我们也可以试一下读取文件的权限,比如,现在c盘根目录下建一个sample.txt的文件,然后在main函数中增加下面两行代码

File file = new File("c:""sample.txt");
FileInputStream in 
= new FileInputStream(file);

则必须相应的在Policy文件中添加:
permission java.io.FilePermission "c:"sample.txt", "read";




2. 接下来是一个关于JAAS验证和授权的简单示例。

呵,这个想想还是直接看源代码好了,在最下面下载,具体知识点可以参考以前文章中介绍的知识点。
Policy文件中有个地方需要修改成自己的路径就可以了。下面的地方

D:\CoreDevelop\workspaces\effectiveWorksapce\javasecuritysample\com\joseph\javasecurity\sample\*



3.注意几点

a) 记得还要注意Policy文件的加载顺序。


When the Policy is initialized, the system policy is loaded in first, and then the user policy is
 added to it. If neither policy is present, a built-in policy is used. This built-in policy is the same
as the java.policy file installed with the JRE.

首先是加载系统的Policy文件,policy文件在(和操作系统和JDK版本有关系)
   
java.home/lib/security/java.policy  (Solaris)
java.home"lib"security"java.policy  (Win32)

比如windows下的JDK1.5Policy文件在
java.home "jre"lib"security" java.policy


用户策略文件在:
user.home/.java.policy  (Solaris)
user.home".java.policy  (Win32)

如果两者都不存在,则使用内置的默认Policy文件,此文件和JRE下面的策略文件是一样的。

b) 另外就是设置

-Djava.security.policy=C:"javasecurityjaas.policy
如果是用=是追加,而==是覆盖Policy文件。


参考文档:
JavaSecuritySample源代码
http://gocom.primeton.com/modules/newbb/viewtopic.php?topic_id=8293
http://java.sun.com/j2se/1.5.0/docs/guide/security/PolicyFiles.html