我需要确保一个类中的方法只由不同包中的选定方法执行。
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。希望这能有所帮助。