【问题标题】:How to grant applet permission to read system properties?如何授予小程序读取系统属性的权限?
【发布时间】:2013-09-27 17:35:11
【问题描述】:

我有一个 Java 小程序正在尝试读取 http.strictPostRedirect 系统属性

代码不是我的(它是 Java 的;所以我无法更改它)。但是你可以在网上找到代码:

HttpURLConnection.java

if (method.equals("POST") && !Boolean.getBoolean("http.strictPostRedirect") && (stat!=307)) 
{
   /* The HTTP/1.1 spec says that a redirect from a POST 
    * *should not* be immediately turned into a GET, and
    * that some HTTP/1.0 clients incorrectly did this.
    * Correct behavior redirects a POST to another POST.
    * Unfortunately, since most browsers have this incorrect
    * behavior, the web works this way now.  Typical usage
    * seems to be:
    *   POST a login code or passwd to a web page.
    *   after validation, the server redirects to another
    *     (welcome) page
    *   The second request is (erroneously) expected to be GET
    * 
    * We will do the incorrect thing (POST-->GET) by default.
    * We will provide the capability to do the "right" thing
    * (POST-->POST) by a system property, "http.strictPostRedirect=true"
    */
    ...
}

基本失败来自于调用:

Boolean.getBoolean("http.strictPostRedirect")

这导致了lot of people grief。显然我没有允许阅读http.strictPostRedirect 系统属性。尝试读取会抛出 AccessControlException

java.security.AccessControlException: access denied (java.util.PropertyPermission http.strictPostRedirect read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
at java.lang.System.getProperty(Unknown Source)
at java.lang.Boolean.getBoolean(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.followRedirect(Unknown Source)

所以,如果我没有读取系统属性的权限:

如何获得系统属性的读取权限?

显然必须有一个设置允许我读取系统属性,否则 Sun 不会有代码透明地尝试访问它。

它是机器世界范围的设置吗?它是域范围的设置吗?它是机器范围的设置吗?它是每个用户的设置吗?它是每个小程序的设置吗?它是每次调用设置吗?它是与特定版本的 Java 运行时引擎相关的设置吗?

tl;dr:如何不崩溃?

读取系统属性

Java 确实有一个list of system properties than at applet cannot read:

  • java.class.path
  • java.home
  • user.dir
  • user.home
  • user.name

我的系统属性http.strictPostRedirect,不在该列表中。那为什么我不能读呢?

另见

【问题讨论】:

    标签: java applet system-properties


    【解决方案1】:

    这里的“修复”是对小程序进行数字签名,然后在出现提示时说服用户确定代码。


    Java 确实有一个系统属性列表,但 applet 无法读取:

    • java.class.path
    • java.home
    • user.dir
    • user.home
    • 用户名

    我的系统属性 http.strictPostRedirect 不在该列表中。那为什么我不能读呢?

    这是沙盒应用程序的属性“短列表”。无法阅读。还有很多。例如。 user 下的任何内容都不允许1。只需将这些视为“典型”即可。

    1. 7 user properties 在沙盒应用中的输出。

    Name            Value
    user.country    unknown
    user.dir        unknown
    user.home       unknown
    user.language   unknown
    user.name       unknown
    user.timezone   unknown
    user.variant    unknown
    

    显然必须有一个设置允许我读取系统属性,否则 Sun 不会有代码透明地尝试访问它。

    没错。请参阅上面的修复程序。


    【讨论】:

      猜你喜欢
      • 2012-02-22
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      • 2011-02-19
      • 2015-12-26
      • 1970-01-01
      相关资源
      最近更新 更多