Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何禁止通过反射创建对象? 开场白_Java_Android_Reflection - Fatal编程技术网

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
    修改器访问构造函数
目标
  • 禁止通过反射方式创建对象,以保护安全性
  • 仅允许访问填充对象字段
    包专用
另外,也许可以通过OOP/OOD方式完成

在纯Java上,使用描述所需内容的策略安装


虽然Android有一个SecurityManager类,但文档说不要使用它,我也不认为有任何方法可以做你想做的事情,尽管我也不知道它有什么意义。

我只是好奇,想知道你为什么要这样做,除非你希望代码被注入到你的应用程序中。@cricket\u 007这只是我的好奇。在我们这个世纪,安全是最重要的。这是我的观点。我同意安全性很重要,但我认为如果有人可以反编译你的应用程序,那么你就会遇到比他们在运行时通过反射修改你的对象更大的问题。这并不像你想象的那么大。不管他有多少源代码,也不可能做到你所描述的。反射不是你唯一的威胁向量。除非你密封你的包,否则任何人都可以用普通的Java代码实例化你的类。安卓怎么样?Upd。从文档:
…它允许应用程序在执行可能不安全或敏感的操作之前确定…
。所以这不完全是我想要的。@ssh抱歉,错过了Android标签,将更新我的答案,尽管我认为在Android上不可能。另外,关于你的第二个评论,我不知道为什么那句话暗示这不是你想要的。您可以通过反射敏感来考虑各种类型的访问,因此不想允许它们访问。这正是SecurityManager的用途。@ssh-您应该能够在Android中导入
SecurityManager
,它是标准Java SDK的一部分。