运行以下代码,我在getPackage()行得到一个StackOverflowError。如果我不能访问getPackage()来检查包,我怎么能只将权限授予包中的类呢?
package myPkg.security;
import java.security.Permission;
import javax.swing.JOptionPane;
public class SimpleSecurityManager extends SecurityManager {
@Override
public void checkPermission(Permission perm) {
Class<?>[] contextArray = getClassContext();
for (Class<?> c : contextArray) {
checkPermission(perm, c);
}
}
@Override
public void checkPermission(Permission perm, Object context) {
if (context instanceof Class) {
Class clazz = (Class) context;
Package pkg = clazz.getPackage(); // StackOverflowError
String name = pkg.getName();
if (name.startsWith("java.")) {
// permission granted
return;
}
if (name.startsWith("sun.")) {
// permission granted
return;
}
if (name.startsWith("myPkg.")) {
// permission granted
return;
}
}
// permission denied
throw new SecurityException("Permission denied for " + context);
}
public static void main(String[] args) {
System.setSecurityManager(new SimpleSecurityManager());
JOptionPane.showMessageDialog(null, "test");
}
}发布于 2010-03-25 03:46:31
解决了!只需在第一个checkPermission方法的开头添加:
if (perm instanceof FilePermission) {
if (perm.getActions().equals("read")) {
// grant permission
return;
}
}发布于 2010-03-25 03:28:28
如果你只想限制包,用checkPackageAccess和/或checkPackageDefinition代替通用的checkPermission怎么样?
https://stackoverflow.com/questions/2510683
复制相似问题