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