java security manager,仅将Java SecurityManager设置为仅一种方法

I have a method A which might look like following:

public double A{

if (secM == null) {

secM = new SecurityManager();

System.setSecurityManager(secM);

}

//do something and return a double

}

The problem is that once the SecurityManager is set, it is for the entire project, but I only need it to be for the class this method is in.

How can I tell the SecurityManager to only verify the permissions for this method/class?

解决方案

What actions do you want the SecurityManager to prevent, and which do you want to allow? SecurityManager is more often used to control particular actions by any method, rather than actions by a single method.

However, it can do the latter too, by creating a custom SecurityManager that examines the call stack - see this answer for an example - is this what you need?

You can provide the system-wide SecurityManager with a policy tailored to your application, so you can permit most things but prevent a small set of actions. The permissions you can control are listed here.

Update: you might be able to do this more elegantly by pulling your method out into a separate class, that can be loaded separately (by a different classloader) than your other classes. See this example. Then you can do a trivial check with the classloader rather than checking the full stack trace. However, I'm not familiar with this method - there may be implications if classes from the two separate classloaders need to interact...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值