请确保方法只能由选定的方法执行

  • 本文关键字:方法 执行 确保 java
  • 更新时间 :
  • 英文 :


我需要确保一个类中的方法只由不同包中的选定方法执行。

package myApp.security;
public class SecurityStuff{
public static final SecurityStuff security = new SecurityStuff();
public KeyStore getKeyStore(){
//if invoked by MySock.getTLSServerSocket()
return keyStore;
//if not, should return null
}
}
package myApp.socks;
public class MySock{
public void getTLSServerSocket(){
KeyStore keyStore = SecurityStuff.security.getKeyStore();
}
}

对于上面的两个类,我如何确保SecurityStuff.getKeyStore()将返回KeyStore,如果它来自类&我允许的方法?

请考虑到罐子稍后会被混淆。

您可以请求发件人的对象:

public KeyStore getKeyStore(Object obj){
if (!obj instanceof MyClassThatIsAllowedToCall) return;
//execute code
}

当你调用getKeyStore时,总是提供参数:

getKeyStore(this);

这似乎是你想要的,但并不安全!你可以很容易地伪造发件人。因此,如果你真的在处理机密数据,这将不是你的选择。

看看StakTraceElement。你可以像一样获得堆叠竞赛

StackTraceElement[] stack = Thread.currentThread().getStackTrace();

然后可以使用getMethodName()获取调用方法名称。因此,您可能可以将想要访问的方法列入白名单,并返回它们的keystore。对于所有其他情况,您可以返回null。希望这能有所帮助。

最新更新