Java 如何禁止通过反射创建对象? 开场白
我有一门课:Java 如何禁止通过反射创建对象? 开场白,java,android,reflection,Java,Android,Reflection,我有一门课: public final class Session { private int userId; private String token; Session(int userId, String token) { this.userId = userId; this.token = token; } public String getToken() { return token;
public final class Session {
private int userId;
private String token;
Session(int userId, String token) {
this.userId = userId;
this.token = token;
}
public String getToken() {
return token;
}
public int getUserId() {
return userId;
}
}
如您所见,我们可以通过反射创建对象
- 我知道我可以禁止通过
或private
修改器访问构造函数包private
- 禁止通过反射方式创建对象,以保护安全性
- 仅允许访问填充对象字段
包专用
虽然Android有一个SecurityManager类,但文档说不要使用它,我也不认为有任何方法可以做你想做的事情,尽管我也不知道它有什么意义。我只是好奇,想知道你为什么要这样做,除非你希望代码被注入到你的应用程序中。@cricket\u 007这只是我的好奇。在我们这个世纪,安全是最重要的。这是我的观点。我同意安全性很重要,但我认为如果有人可以反编译你的应用程序,那么你就会遇到比他们在运行时通过反射修改你的对象更大的问题。这并不像你想象的那么大。不管他有多少源代码,也不可能做到你所描述的。反射不是你唯一的威胁向量。除非你密封你的包,否则任何人都可以用普通的Java代码实例化你的类。安卓怎么样?Upd。从文档:
…它允许应用程序在执行可能不安全或敏感的操作之前确定…
。所以这不完全是我想要的。@ssh抱歉,错过了Android标签,将更新我的答案,尽管我认为在Android上不可能。另外,关于你的第二个评论,我不知道为什么那句话暗示这不是你想要的。您可以通过反射敏感来考虑各种类型的访问,因此不想允许它们访问。这正是SecurityManager的用途。@ssh-您应该能够在Android中导入SecurityManager
,它是标准Java SDK的一部分。