您的位置:首页 > 编程语言 > Java开发

java的安全策略

2016-09-25 22:30 134 查看

java的安全策略

if (System.getSecurityManager() != null && factory instanceof SmartFactoryBean) {
isEagerInit = AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
@Override
public Boolean run() {
return ((SmartFactoryBean<?>) factory).isEagerInit();
}
}, getAccessControlContext());
}


这个是spring 源码中初始化singleton bean的逻辑。

AccessController.doPrivileged 第一次遇见,网上搜索了一些资料。

安全策略背景

众所周知,Java语言具有完善的安全框架,从编程语言,编译器、解释程序到Java虚拟机,都能确保Java系统不被无效的代码或敌对的编译器暗中破坏,基本上,它们保证了Java代码按预定的规则运作。但是,当我们需要逾越这些限制时,例如,读写文件,监听和读写Socket,退出Java系统等,就必须使用数字签名或安全策略文件(*.Policy)。

在企业内部网中,本文提出了使用安全策略文件来设置java程序权限的一种简单的方法。由于企业内部网中各台计算机的位置、用途和安全性明确,更适于使用安全策略文件来设置java的权限,软件的安装、设置、升级和迁移都非常的方便,并且,还可以和数字签名配合使用,更重要的是,可以细分每个java程序的权限,使用起来灵活方便。

什么是安全策略?

Java应用程序环境的安全策略,详细说明了对于不同的代码所拥有的不同资源的许可,它由一个Policy对象来表达。为了让applet(或者运行在SecurityManager下的一个应用程序)能够执行受保护的行为,例如读写文件,applet(或Java应用程序)必须获得那项操作的许可,安全策略文件就是用来实现这些许可。

策略安全文件(*.policy)格式

grant codeBase "file:/C:/zhouhbFile/developments/eclipse-workspaces/ws-xgsdk-jee/AccessControllerTest/bin/*" {
permission java.io.FilePermission "f:/temp/AccessControllerTest2.jar", "read";
permission java.lang.RuntimePermission "createClassLoader";
};

grant codeBase "file:/f:/temp/AccessControllerTest2.jar" {
permission java.io.FilePermission "f:/temp/text.txt", "read";
};


grant 表示赋予权限的意思

codeBase 表示后面的代码。即赋予权限给后面的代码。如果不限定则表示作用所有的代码。

具体可详情http://www.blogjava.net/china-qd/archive/2006/04/25/42931.html

一个示例说明安全策略

http://blog.csdn.net/zhang__jiayu/article/details/25654867

以上博文的示例,亲自试验是正确的。

如果在policy文件中的
grant codeBase "file:/C:/zhouhbFile/developments/eclipse-workspaces/ws-xgsdk-jee/AccessControllerTest/bin/*"
片段中加入如下代码

permission java.io.FilePermission "f:/temp/text.txt", "read";


不使用AccessController.doPrivileged程序也是可以运行的。这表明在调用stack里面,
file:/C:/zhouhbFile/developments/eclipse-workspaces/ws-xgsdk-jee/AccessControllerTest/bin/*
是需要读text.txt文件的权限的。博主总结的很好,感谢。

AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
doFileOperation();
return null;
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 安全