gpt4 book ai didi

java - 默认的 ReflectPermissions 是什么以及如何更改它们?

转载 作者:行者123 更新时间:2023-11-29 06:00:09 25 4
gpt4 key购买 nike

我试图了解在哪些条件下允许调用 Method.setAccessible()。据我了解各种文档,调用 setAccessible() 会触发 SecurityManager 中的检查以查看是否允许更改访问修饰符。

鉴于此,我试图找出此权限的默认设置是什么,以及我可以在哪里更改它。在中央 java.policy 文件中,没有提及这些权限,我找不到任何其他生效的策略文件,我也找不到任何关于 SecurityManager 可能应用的默认值的附加文档。

我试图解决这个问题的主要原因是我使用反射来规避访问修饰符。我想知道我必须告诉客户我的代码如何让他们为他们工作。

有任何关于在哪里查看的提示或关于其工作原理的见解吗?

最佳答案

一切都与安全管理器有关。

默认情况下,没有安装 SecurityManager(这就是所有权限检查检查 SM 可用性的原因)。这是您的默认值 - 一切正常。

一些启动器(如小程序环境)会安装一个 SecurityManager,它又默认使用一个基于策略文件的 Policy。您可以在“java.security”文件中更改它。其他环境(如 servlet 容器或 Java EE 容器)也可以安装 SecurityManager。

在此之后,Java 安全性就位。默认情况下,您的代码不能再调用“setAccessible”。

要重新启用它,您必须更改策略文件(如果默认策略处于 Activity 状态,否则 -> 请阅读您正在运行的环境的文档)。使访问器可访问是一个巨大的变化 - 因此请仔细检查您的要求和运行时环境的要求是否仍然兼容。例如,对普通小程序进行此更改将严重损害安全性。

grant  {
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
};

将启用权限。

关于java - 默认的 ReflectPermissions 是什么以及如何更改它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10455724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com