私有方法真的安全吗?

2024-05-08

在Java中private访问修饰符被认为是安全的,因为它在类外部不可见。那么外界也不知道这个方法。

但我认为Java反射可以用来打破这个规则。考虑以下情况:

public class ProtectedPrivacy{

  private String getInfo(){
     return "confidential"; 
  }

}  

现在我将从另一个班级获取信息:

public class BreakPrivacy{

   public static void main(String[] args) throws Exception {
       ProtectedPrivacy protectedPrivacy = new ProtectedPrivacy();
       Method method = protectedPrivacy.getClass().getDeclaredMethod("getInfo", null);
       method.setAccessible(true);
       Object result = method.invoke(protectedPrivacy);
       System.out.println(result.toString());
   }
} 

此时此刻,我只是认为私有方法仍然是安全的,因为要做像上面这样的事情我们必须知道方法名称。但是,如果类包含由其他人编写的私有方法,我们就看不到这些方法。

但由于下面的代码行,我的观点变得无效。

Method method[] = new ProtectedPrivacy().getClass().getDeclaredMethods();

现在这个method[]包含上面需要做的所有事情。我的问题是,有没有办法避免使用 Java 反射做这种事情?

我引用了一些观点Java文档 http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html澄清我的问题。

选择访问级别的提示:

如果其他程序员使用你的类,你要确保错误 误用不会发生。访问级别可以帮助您做到这一点。使用 对于特定的情况有意义的最严格的访问级别 成员。使用 private 除非你有充分的理由不这样做。


这取决于你所说的“安全”是什么意思。如果您运行的安全管理器允许这种事情,那么是的,您可以通过反射做各种讨厌的事情。但在这种环境下,库可能只需修改即可使该方法公开。

在这样的环境中,访问控制实际上是“咨询”——您实际上信任代码能够很好地发挥作用。如果你don't信任您正在运行的代码,您应该使用更具限制性的安全管理器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

私有方法真的安全吗? 的相关文章

  • 如何在 Eclipse 中用阿拉伯语读写

    我在 eclipse 中编写了这段代码来获取一些阿拉伯语单词 然后打印它们 public class getString public static void main String args throws Exception PrintS
  • Java 创建浮雕(红/蓝图像)

    我正在编写一个 Java 游戏引擎 http victoryengine org http victoryengine org 并且我一直在尝试生成具有深度的 3D 图像 您可以使用那些红色 蓝色眼镜看到 我正在使用 Java2D 进行图形
  • 有没有好的方法来解析用户代理字符串?

    我有一个Java接收模块User Agent来自最终用户浏览器的字符串的行为需要略有不同 具体取决于浏览器类型 浏览器版本甚至操作系统 例如 FireFox 7 0 Win7 Safari 3 2 iOS9 我明白了User Agent由于
  • 如何对 IntStream 进行逆序排序

    我正在使用 txt 文件读取数字BufferedReader 我想颠倒该流中元素的顺序 以便在收集它们时 它们将从最高到最低排列 我不想在构建数组后进行排序 因为我不知道其中可能有多少元素 我只需要最高的 N 个元素 in new Buff
  • Google Inbox 类似 RecyclerView 项目打开动画

    目前 我正在尝试实现 Google Inbox 例如RecyclerView行为 我对电子邮件打开动画很好奇 我的问题是 该怎么做 我的意思是 他们使用了哪种方法 他们用过吗ItemAnimator dispatchChangeStarti
  • 方法断点可能会大大减慢调试速度

    每当向方法声明行添加断点 在 Intellij IDEA 或 Android Studio 中 时 都会出现一个弹出窗口 方法断点可能会大大减慢调试速度 为什么会这样戏剧性地减慢调试速度 是我的问题吗 将断点放在函数的第一行有什么不同 Th
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • PropertySources 中各种源的优先级

    Spring引入了新的注释 PropertySources对于所有标记为的类 Configuration since 4 0 需要不同的 PropertySource作为论证 PropertySources PropertySource c
  • 如何将 XMP XML 块序列化为现有的 JPEG 图像?

    我有许多 JPEG 图像 其中包含损坏的 XMP XML 块 我可以轻松修复这些块 但我不确定如何将 固定 数据写回图像文件 我目前正在使用 JAVA 但我愿意接受任何能让这项任务变得容易的事情 这是目标关于 XMP XML 的另一个问题
  • 所有junit测试后的清理

    在我的项目中 我必须在所有测试之前进行一些存储库设置 这是使用一些棘手的静态规则来完成的 然而 在所有测试之后我不知道如何进行清理 我不想保留一些神奇的静态数字来引用所有测试方法的数量 我应该一直维护它 最受赞赏的方法是添加一些侦听器 该侦
  • @EnableTransactionManagement 的范围是什么?

    我试图了解正确的放置位置 EnableTransactionManagement多个 JavaConfig 上下文的情况下的注释 考虑以下场景 我在 JPAConfig java 和 AppConfig java 中有 JPA 配置以及一组
  • 尝试在没有 GatewayIntent 的情况下访问消息内容

    我希望每当我写一条打招呼的消息时 机器人都会在控制台中响应一条消息 但它只是给我一个错误 JDA MainWS ReadThread WARN JDA Attempting to access message content without
  • tomcat 过滤所有 web 应用程序

    问题 我想对所有网络应用程序进行过滤 我创建了一个过滤器来监视对 apache tomcat 服务器的请求 举例来说 它称为 MyFilter 我在 netbeans 中创建了它 它创建了 2 个独立的目录 webpages contain
  • jmap - 组织和堆操作会给 jvm 带来开销吗?

    正如标题所述 需要多少开销jmap histo and jmap heap分别带到jvm 如果一个内存敏感的 Java 进程处于OutOfMemory 例如 大约 96 的堆已满 并且无法通过 full gc 清除 其中一项操作是否有可能将
  • 在 AKKA 中,对主管调用 shutdown 是否会停止其监督的所有参与者?

    假设我有一位主管连接了 2 位演员 当我的应用程序关闭时 我想优雅地关闭这些参与者 调用supervisor shutdown 是否会停止所有参与者 还是我仍然需要手动停止我的参与者 gracias 阻止主管 https github co
  • 如何为 Jackson 编写一个包罗万象的(反)序列化器

    当您提前知道类型时 编写自定义序列化器非常容易 例如 MyType一个人可以写一个MyTypeSerializer extends StdSerializer
  • 在 Selenium WebDriver 上如何从 Span 标签获取文本

    在 Selenium Webdriver 上 如何从 span 标记检索文本并打印 我需要提取文本UPS Overnight Free HTML代码如下 div id customSelect 3 class select wrapper
  • 从java中的字符串数组中删除空值

    java中如何从字符串数组中删除空值 String firstArray test1 test2 test4 我需要像这样没有 null 空 值的 firstArray String firstArray test1 test2 test4
  • 从一个文本文件中获取数据并将其移动到新的文本文件

    我有一个文件 里面有数据 在我的主要方法中 我读入文件并关闭文件 我调用另一种方法 在原始文件的同一文件夹内创建一个新文件 所以现在我有两个文件 原始文件和通过我调用的方法生成的文件 我需要另一种方法 从原始文件中获取数据并将其写入创建的新
  • Java 编码风格、局部变量与重复方法调用

    我更喜欢使用局部变量而不是多次调用同一方法 I prefer this Vehicle vehicle person getVehicle if vehicle instanceof Car Car car Car vehicle car

随机推荐

  • 如何在 Bixby 输入视图中使用语音输入选择?

    目前 我设置了一个提示来收集用户的电子邮件 它在选择输入视图中提供存储在用户配置文件中的选项 但是 如果用户通过语音与 Bixby 交互 例如 可能他们的手很忙 是否有办法为这些选项提供别名 以便用户只需说 家庭 即可获取家庭电子邮件或 工
  • 无锁算法中的 ABA

    我明白了ABA http en wikipedia org wiki ABA problem问题 但我无法理解的是 他们说在语言中自动垃圾收集它可能不会展示 所以我的问题是 自动垃圾收集如何防止ABA问题的发生 在java中是否可能 如果可
  • 连接错误 - SQLSTATE[HY000] [2002] 操作超时

    我在从 Windows 2008 R2 应用程序服务器连接到也在 Windows 2008 R2 上运行的 MySQL 服务器时遇到问题 Laravel 应用程序报告错误 exception PDOException with messag
  • gnuplot 中的 output.png 不如提示 shell 中的图好

    我经常绘制图表gnuplot提示 shell 如下所示 gunuplot gt plot sin x with linespoints pointtype 3 出现的数字很棒 今天 我将图表保存在 png文件 像这样 gnuplot gt
  • 我如何解决语义错误:“类没有名为..”的关联

    我正在关注 symblog symfony2 教程的第 5 部分 http tutorial symblog co uk docs customising the view more with twig html 标题下 主页 博客和评论
  • 是否可以在 gnuplot 中设置标签相对于键的位置?

    我的情节的本质是这样的 绝对的标签并不能真正发挥作用 我无法限制 y 中的范围 所以想知道是否有办法将我的标签文本包含在键内或将其相对于键放置 即下面 set term png enhanced size 1024 768 set titl
  • 运行时错误:范围自动筛选上的“1004”

    我想用 VBA 做什么 使用数组过滤表并删除行 我的数组有 4 个元素 在循环中更改为有 5 个不同的集合 正在过滤的列有 5 个元素 我只想得到 1 这是一个循环 它将创建 5 个报告 每个报告根据第 29 列过滤不同的元素 如果在调试模
  • 如何在调用处替换内联函数代码?

    我想知道内联函数调用是如何被内联代码替换的 我在一些书中读到编译器可能会将内联函数视为普通函数 任何人都可以解释内联函数是如何工作的 来自 C 常见问题解答 http www parashift com c faq lite inline
  • 属性编辑器未向 PropertyEditorManager 注册:自定义标记调用时出错

    调用我的时出现以下错误testtag jsp org apache jasper JasperException 无法将属性 att1 的字符串 转换为类 javax servlet jsp tagext JspFragment 属性编辑器
  • 缓动不适用于toggleClass() 或addClass()

    我有一个在页面上显示和隐藏实用工具栏的功能 我想将其动画化 这不是动画 类 标志 是空的 min 类只是更改背景图像以及实用工具栏的高度和绝对位置 我究竟做错了什么 document ready function var ubar ccUt
  • 为什么 Java BufferedReader() 不能正确读取阿拉伯文和中文字符?

    我正在尝试读取一个每行包含英文和阿拉伯字符的文件以及另一个每行包含英文和中文字符的文件 然而 阿拉伯文和中文的字符无法正确显示 它们只是显示为问号 知道我该如何解决这个问题吗 这是我用于阅读的代码 try String sCurrentLi
  • 比较 C# 中 DateTime 的二进制表示形式

    我有一个DateTime表示为长 8 个字节 来自DateTime ToBinary 我们称之为dateTimeBin 是否有一种最佳方法可以删除时间信息 我只关心日期 以便我可以将其与一天的开始进行比较 假设我们将此样本值作为一天的开始
  • 为什么 Rust 不允许在一种类型上复制和删除特征?

    From the book https doc rust lang org book 2018 edition ch04 01 what is ownership html stack only data copy Rust 不允许我们用C
  • 如何在 Mac OS X 10.9.5 上以编程方式读取低功耗蓝牙传输的数据?

    我正在尝试阅读蓝牙低功耗 http www bluetooth com Pages low energy tech info aspx使用 Ruby 以编程方式传输数据 低功耗蓝牙技术不支持标准规范 v4 0 中的串行端口配置文件 SPP
  • 如何使用 Typescript 从 mui 扩展调色板

    我正在尝试扩展 mui 提供的调色板 覆盖主色 次要颜色等效果很好 但如果我想在之后创建一组自定义颜色 我不知道如何使其工作 有很多没有打字稿的例子 但是当这个人进入游戏时 事情就变得更加棘手 假设我有这个 主题 tsx palette p
  • CSS 轮廓宽度不起作用

    我正在尝试将输入元素的轮廓宽度设置为焦点 无论我的设置如何 轮廓宽度都保持不变 就像它是无法更改的默认设置一样 这是来自 codepen 的示例 http codepen io FrenkyB pen mEaEyL editors 1100
  • 如何防止 Keras 在训练期间计算指标

    我正在使用 Tensorflow Keras 2 4 1 并且有一个 无监督的 自定义指标 它将我的几个模型输入作为参数 例如 model build model returns a tf keras Model object my met
  • Firestore 安全规则:在请求上使用 hasOnly 来检查是否仅更新特定字段

    我正在设置 Firestore 安全规则 但遇到一个问题 即我想使用 hasOnly 函数限制仅更新文档中的一个特定字段 问题是我使用模拟器不断得到 拒绝 结果 我肯定做了一些简单的错误 我试图防止有人可以更新文档中的其他字段update
  • 存储库和服务层之间的区别

    我查看了一些相关的问题 但仍然没有看到存储库和服务层之间有太大区别 所以给出的例子我想它应该看起来像这样 如果不是请告诉我为什么 public interface ProductRepository extends CrudReposito
  • 私有方法真的安全吗?

    在Java中private访问修饰符被认为是安全的 因为它在类外部不可见 那么外界也不知道这个方法 但我认为Java反射可以用来打破这个规则 考虑以下情况 public class ProtectedPrivacy private Stri