您的位置:首页 > 其它

安全管理器及策略

2017-11-13 17:02 225 查看

SecurityManager

作用:开关,是否启用沙箱环境;

启用方式:

JVM启动参数中添加-Djava.security.manager;

通过代码安装System.setSecurityManager(new MySecurityManager());

沙箱策略

策略:指定某些代码对某些资源具有某些访问权限,如/home/admin目录下的代码对/logs目录下文件有只读权限,示例如下图所示:



JDK的Policy: 在任何时候JVM中只能有一个Policy对象起作用,可以通过Policy.getPolicy()查看当前安装的Policy对象(需要getPolicy权限),通过调用Policy.setPolicy()更改当前安装的Policy对象(需要setPolicy权限),通过implies()检查代码是否相应权限,并提供refresh()支持策略文件的热更新,如下图所示:



自定义Policy: 通过更改JRE的lib/security目录中安全属性文件java.security文件实现,更新属性policy.provider的值即可,如下图所示:



系统默认Policy:

refresh逻辑:重新加载所有的策略文件,用于热更新;

策略文件加载:首先,加载安全属性文件java.security指定文件;其次,加载系统属性java.security.policy或者java.security.auth.policy指定文件,如下图所示:



策略文件的语法请参考:http://hubingforever.blog.163.com/blog/static/17104057920118238033494/

Policy热更新示例:

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.Policy;

public class SandBoxTest {
public static void file() {
File f = new File("D:/mvn.txt");
InputStream is;
try {
is = new FileInputStream(f);
byte[] content = new byte[1024];
while (is.read(content) != -1) {
System.out.println(new String(content));
}
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) throws Exception {
for(int i = 0; i < 10; i++){
System.out.println(i);
file();
Thread.sleep(5000);
Policy.getPolicy().refresh(); //刷新安全策略
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: