Как предоставить апплету разрешение на чтение системных свойств?
У меня есть 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")
Который причинил много горя людям. Очевидно, мне неразрешено читать системное свойство 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 Runtime Engine ?
Tl; dr : Как сделать так, чтобы не разбиться?
Чтение системных свойств
Java имеет список системных свойств, чем в апплете не может читать :
java.class.path
java.home
user.dir
user.home
user.name
Мое системное свойство , http.strictPostRedirect
, его нет в этом списке. Так почему же я не могу его прочесть?
См. также
HttpURLConnection.java
- HttpURLConnection перенаправляет мой запрос POST в GET
- исключение PropertyPermission, созданное при отправке в Serlvet
- Доступ Запрещен Ошибка
- Ява.безопасность.AccessControlException
- как подписать Java-апплет и установить разрешения на чтение системных свойств, таких как пользователь, вошедший в систему клиента
- Как предоставить апплету разрешение на запись в файловую систему
- использование Java SecurityManager для предоставления / запрета доступа к системным функциям
- Oracle.com - что апплеты могут и не могут делать
1 ответ:
"исправление" здесь заключается в цифровой подписи апплета, а затем убедить пользователя ОК код при появлении запроса.
Java действительно имеет список системных свойств, чем в апплете не может прочитать:
- java.класс.путь
- java.главная
- пользователь.реж.
- пользователь.главная
- user.name
Мое системное свойство, http.strictPostRedirect, нет в этом списке. Так почему же я не могу его прочесть?
Это и есть "краткий список" свойства, что песочница приложение. не умеет читать. Есть и еще много других. Например, ничто под
user
не допускается.1. Просто считайте их "типичными".
- Выход для 7
user
свойства в песочнице приложения.
Name Value user.country unknown user.dir unknown user.home unknown user.language unknown user.name unknown user.timezone unknown user.variant unknown
Очевидно, должна быть настройка, которая дает мне разрешение на чтение системного свойства, иначе Sun не имела бы кода, который прозрачно пытается получить к нему доступ.
Верно. Смотрите исправление выше.