【问题标题】:How packages provide security for classes and interfaces?包如何为类和接口提供安全性?
【发布时间】:2015-06-01 12:51:55
【问题描述】:

在阅读 java 中的包时,我遇到了包的 imp 特性

java里面说

为类和接口提供安全性。使外部人员无法 直接访问它,但如何? 我没用过这个功能,很想知道。

【问题讨论】:

  • 你能提供更多的上下文吗?您可能误解了包级别的访问权限(也称为默认权限)。
  • 有用于设置安全性的 Java 访问修饰符...公共的,嗯,公共的。私有是没有其他类可以访问它,而受保护意味着只有同一个包中的子类和类可以访问它。
  • @ElliottFrisch 是的,我直接漏掉了一个字
  • @ManOfPanda 是的,这是我们提供安全性的唯一方式。

标签: java packages


【解决方案1】:

包不提供任何有意义的安全性。但是,它们确实有助于通过“包私有”访问来支持模块化:

package com.example;

public class Example {
    int someMethod() { ... }
}

someMethod 的访问权限是包私有的,这意味着它只对com.example 包中的其他类可见。您可以用同样的方式控制字段、类和接口的可见性。

请注意,对于大多数 Java 应用程序来说,这不是一种可靠的安全机制。应用程序很容易使用反射来解决基于访问修饰符的大多数(如果不是全部)访问限制。阻止这种情况的唯一方法是在禁用反射 API 的安全沙箱中运行不受信任的代码。

【讨论】:

  • @Stephan C 能否让我进一步了解反射如何围绕访问权限工作,以及如何更详细地了解如何阻止不受信任的代码?我知道它不在问题域中,但它很有趣。
【解决方案2】:

这个问题很模糊,但这是一种使用包提供安全性的方法......

如果一个变量是受保护的,只有它的子类和同一个包中的类可以访问它。如果您想增加安全性,这会很有用,因为您只能使添加到包中的文件能够访问您的类中的变量。

例子:

假设我是银行计划。我有一个名为 balance 的受保护变量。如果变量是公开的,那么某人可以创建一个可以访问该类并根据他们喜欢的方式改变平衡的程序。但是由于它是受保护的,只有我放在银行包中的文件才能访问该变量来更改它。

【讨论】:

  • 这个问题并不含糊,但它让我有点困惑,所以我发布了它。你的解释很棒。:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
  • 2020-05-13
  • 2019-08-06
  • 2013-03-21
  • 1970-01-01
相关资源
最近更新 更多