【发布时间】:2018-10-28 15:25:22
【问题描述】:
我希望 B 仅由 private 方法 A#getSensitiveData() 运行,该方法使用或对敏感数据进行一些处理(例如:加密密钥、国民身份证等)。
public final class A{
private transient final B sensitiveHolder; //set at Constructor
public A(B sensitiveHolder){
this.sensitiveHolder = sensitiveHolder;
}
private final byte[] getSensitiveData(){
return sensitiveHolder.getSensitiveData();
}
}
public final class B{
private transient final byte[] sensitiveData;//encrypt and set at Constructor
public final byte[] getSensitiveData(){
//check if it is run by A#getSensitiveData(); if it is, decrypt by DEK and give plaintext.
}
}
请注意代码会被混淆,因此请不要将任何包名称输入为String。
我必须用SecurityManager#checkPrivilege()和AccessController.doPrivileged()写什么才能达到这样的效果?
编辑:显然这是不同的,因为所谓的“答案”不包含任何代码。 WORKING CODE 比“哦,做这个做那个”更有价值。
【问题讨论】:
-
对于解决
B.getSensitiveData如何检查和限制谁在调用它的问题的代码的工作答案,请参阅stackoverflow.com/a/41420960/14955它不使用SecurityManager。