首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SecurityManager StackOverflowError

SecurityManager StackOverflowError
EN

Stack Overflow用户
提问于 2010-03-25 03:10:03
回答 2查看 489关注 0票数 0

运行以下代码,我在getPackage()行得到一个StackOverflowError。如果我不能访问getPackage()来检查包,我怎么能只将权限授予包中的类呢?

代码语言:javascript
复制
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");
    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-25 03:46:31

解决了!只需在第一个checkPermission方法的开头添加:

代码语言:javascript
复制
if (perm instanceof FilePermission) {
    if (perm.getActions().equals("read")) {
    // grant permission
    return;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2010-03-25 03:28:28

如果你只想限制包,用checkPackageAccess和/或checkPackageDefinition代替通用的checkPermission怎么样?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2510683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档