核心概念,如下两个 vm properties:
java.security.manager
java.security.policy
java.security.policy属性
用来控制resource资源的访问的配置文件
例如属性配置的读取、目录的读写等;所有可配置权限可以参考java自带工具policytool->add policy entry->add permission->permission的下拉选项
可以直接使用policytool工具进行policy配置文件的生成,生成后文件内容如下:
/* AUTOMATICALLY GENERATED ON Thu Mar 02 08:35:40 CST 2023*/
/* DO NOT EDIT */
grant codeBase "https://docs.oracle.com/javase/tutorial/security/tourl/examples/" {
};
/*注:因为此处代码为使用IDEA进行编写和测试,IDEA会将工程代码编译到对应项目的target/classes目录所以此处的codeBase为如下目录*/
grant codeBase "file:///home/xxxx/workspace/java/learnJava/target/classes/" {
permission java.util.PropertyPermission "user.home", "read";
permission java.util.PropertyPermission "java.home", "read";
};
/*注:security.jar是包含要进行policy策略管理的可执行文件的jar包*/
grant codeBase "file:///home/owisho/workspace/java/learnInJava/security/tmp/security.jar" {
permission java.util.PropertyPermission "user.home", "read";
permission java.util.PropertyPermission "java.home", "read";
};
注意:
1.文件是ASCII编码的文本文件
2.文件中的codeBase要格外注意:一定要是xxx.class文件所在的目录或者jar文件,如上面的代码例子/target/classes 和security.jar
3.java8 本身有默认的security policy配置文件,位于${JAVA_HOME}/jre/lib/security/目录下
4.人为添加policy策略文件的方式有两种(针对java8):a.使用-Djava.security.policy=${policy配置文件} 这个vm property来新增个人策略 b.修改${JAVA_HOME}/jre/lib/security/目录下的java.security文件增加 policy.url.{n}=${policy配置文件} 来增个人策略
java.security.manager属性
对是否使用security manager 进行管理的开关,默认不使用,即程序拥有所有权限
使用java -Djava.security.manager ${java.main} 开启security manager管理
使用java -Djava.security.manager -Djava.security.policy=${policy配置文件} ${java.main} 开启security manager 管理并使用${policy配置文件}作为自定义策略的补充
命令行示例:
java -cp security.jar -Djava.security.manager -Djava.security.policy=security.policy GetProps
java -cp target/classes/ -Djava.security.manager -Djava.security.policy=examplePolicy org.example.GetProps
#git hub地址:https://github.com/owisho/learnInJava/tree/master/security