我希望能够在一个包中编写一个Java类,它可以访问另一个包中的类的非公共方法,而不必使它成为另一个类的子类.这可能吗?
我正在浏览这个链接,OBJ10-J.不要使用公共静态非最终字段,它说,
客户端代码可以简单地访问公共静态字段,因为安全管理器不会检查对这些字段的访问.
那是什么意思呢?即逃离安全经理他们是什么意思?
如果他们只是意味着它,因为现场被非最终和public,然后怎么来的非最终,public实例字段比他们不同static的同行?(就代码安全而言)
我已经经历过这个问题并且在安全方面没有看到任何提及,为什么静态变量被认为是邪恶的
publicclass的public static字段可以从任何地方访问,所以public实例字段也可以访问,那么区别在哪里?为什么非最终 public实例字段不是安全问题,而是存在static?
在软件开发中,我们都使用软件提供商提供的库.在A类中考虑有四个函数,即x,y,z.我只是希望我的开发团队避免使用x函数.因此,我找到了一个想法,而不是告诉他们不要使用.继承类并覆盖所有函数,对于函数x,抛出一个不支持的方法异常,其余的我调用超级方法.我也发现了一个问题,开发人员可以直接使用基类A,如何避免直接使用A类.我在OSGi中发现了类似的功能,可以引入lib包然后不导出等等.有没有办法实现这个是java?
我希望B只能通过对敏感数据使用或执行某些处理的private方法运行A#getSensitiveData()(例如:加密密钥,国家ID,等等).
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.
}
}
Run Code Online (Sandbox Code Playgroud)
请注意代码将被混淆,因此请不要将任何包名称放入String.
我必须写什么跟SecurityManager#checkPrivilege()和AccessController.doPrivileged()我能达到这样的效果之前?
编辑:显然这是不同的,因为所谓的"答案"不包含任何代码.工作代码的价值远远超过"哦,只做这个和那个".