java - 我可以通过配置 java.policy 文件来拒绝对 jvm 类的访问吗?

标签 java security google-app-engine policy classloader

我想在我的 jdk6\jre\lib\security\java.policy 文件中添加一个禁令,以创建一些被 appengine 列入黑名单的类。例如,我希望我的本地 jvm 在应用程序尝试实例化 javax.naming.NamingException 时抛出异常。

有可能吗?

我会尝试在这里解释我的具体问题。 Google 提供的服务(GAE-google 应用程序引擎)对可以使用的类有一些限制。例如,不实例化 javax.naming 包中的 JNDI 类。他们还提供了一个测试服务器,可以用来在我的机器上测试这个应用程序,但是这个服务器允许这样的类并且可以执行代码。只有在将应用程序上传到 google 后,您才发现您使用了一个列入黑名单的类。我在想是否不能在开发 jvm 上执行此类类黑名单强制执行。否则我认为这很容易,他们可能已经提供了这样的政策文件。

最佳答案

您可以编写一个小型加载器应用程序来创建一个 new, custom classloader .然后可以使用此类加载器加载您的应用程序类。

在自定义类加载器中,当您的应用程序尝试访问您要列入黑名单的类时,您可以抛出 ClassNotFoundException。

您需要重载 load() 方法。如果允许该类,此方法将负责在您的黑名单类上抛出异常或委托(delegate)给父类加载器。示例实现:

public Class loadClass(String name) throws ClassNotFoundException {
    if(name.equals("javax.lang.ClassIDontLike")){
       throw new ClassNotFoundException("I'm sorry, Dave. I'm afraid I can't do that.");
    }
    return super.loadClass(name, false);
}

(当然,真正的实现可能比这复杂得多)

因为您的应用程序的类是通过此类加载器加载的,并且您只是在需要时将 loadClass() 调用委托(delegate)给父类加载器,所以您可以将所需的任何类列入黑名单。

我很确定这是 Google 用于将其服务器中的类列入黑名单的方法。他们在特定的类加载器中加载每个应用程序。这也类似于 Tomcat 隔离不同 Web 应用程序的方式。

关于java - 我可以通过配置 java.policy 文件来拒绝对 jvm 类的访问吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/991703/

相关文章:

ruby-on-rails - Rails password_confirmation 正在使用 Devise 进行过滤

docker - 如何限制Kubernetes容器查看主机(K8s Minion)操作系统上的 block 设备列表?

ruby-on-rails - Ruby on Rails API 安全性

google-app-engine - 为自定义域启用 SSL 时,Google App Engine 中未列出子域

google-app-engine - 升华 : No code completion for App Engine packages

java - 使用 Jsoup 检索时间标签

java - @RequestBody 没有按预期工作

java - 如何修改另一个类的方法

c# - 跨平台、稳定、功能强大的网络平台

python - 等效于 Python 中的 @Named API 参数