【发布时间】: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.pathjava.homeuser.diruser.homeuser.name
我的系统属性,http.strictPostRedirect,不在该列表中。那为什么我不能读呢?
另见
HttpURLConnection.java- HttpURLConnection redirects my POST request into a GET
- PropertyPermission exception thrown when posting to Serlvet
- Access Denied Error
- java.security.AccessControlException
- How to sign a java applet and setting permissions to read system properties such as the logged on user of a client
- how to provide access permission for applet to write on file system
- Using Java SecurityManager to grant/deny access to system functions
- Oracle.com - What Applets Can and Cannot Do
【问题讨论】:
标签: java applet system-properties