sec*_*ger 4 java securitymanager policyfiles
在Java策略文件中,grant codeBase
语法指定应授予哪些代码库哪些权限.例如,
grant codeBase"file:/ C:/abc.jar"{permission java.security.AllPermission; };
授予AllPermission
abc.jar中的代码
以类似的方式,有没有办法deny
获得特定语法的权限?像这样:
deny codeBase"file:/ C:/def.jar"{permission java.io.FilePermission; };
以便内部代码def.jar
获取除FilePermission之外的所有其他权限?
这甚至可能吗?
我知道这可以使用SecurityManager
类轻松完成,但我只是想通过仅使用策略文件来了解是否可行.
小智 15
我意识到这已经快一年了,但我想我正在尝试做类似的事情.
有一种方法可以设置运行时权限,以便Java不会授予全局权限.然后,您只能指定要为您的应用授予的权限.关键是使用以下选项运行您的应用程序.
java -Djava.security.manager -Djava.security.policy==policyFile.txt MyClass
Run Code Online (Sandbox Code Playgroud)
注意双等于-Djava.security.policy==policyFile.txt
.double等于==
意味着仅使用命名文件中的权限而不是单个等号-Djava.security.policy=policyFile.txt
,这意味着除了继承的全局权限之外还使用这些权限.
然后创建一个策略文件,不包括您要拒绝的权限:
// policyFile.txt
grant codeBase "file:/C:/abc.jar" {
// list of permissions minus the ones you want to deny
// for example, the following would give the application
// ONLY AudioPermission and AWTPermission. Other
// permissions such as java.io.FilePermission would be
// denied.
permission javax.sound.sampled.AudioPermission;
permission java.awt.AWTPermission;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用Prograde库,该库通过拒绝规则来实现策略文件。
将以下Maven依赖项添加到您的应用中
<dependency>
<groupId>net.sourceforge.pro-grade</groupId>
<artifactId>pro-grade</artifactId>
<version>1.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
然后使用标准系统属性为您的应用程序启用它:
-Djava.security.manager=net.sourceforge.prograde.sm.ProgradeSecurityManager -Djava.security.policy==/path/to/your/application.policy
Run Code Online (Sandbox Code Playgroud)
或者您也可以在代码中以编程方式替换Policy实现:
System.setProperty("java.security.policy","/path/to/your/application.policy");
Policy.setPolicy(new ProgradePolicyFile());
Run Code Online (Sandbox Code Playgroud)
策略文件的语法与标准实现类似,但是可以使用deny
代替,grant
也可以通过使用关键字更改优先级priority
(默认值为"deny"
-以保持向后兼容)。
例如,您可以做某事。喜欢:
grant {
permission java.lang.RuntimePermission "*";
};
deny {
permission java.lang.RuntimePermission "exitVM.*";
};
Run Code Online (Sandbox Code Playgroud)
其他示例在这里。
归档时间: |
|
查看次数: |
9685 次 |
最近记录: |