Как предоставить апплету разрешение на чтение системных свойств?


У меня есть 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, его нет в этом списке. Так почему же я не могу его прочесть?

См. также

1 2

1 ответ:

"исправление" здесь заключается в цифровой подписи апплета, а затем убедить пользователя ОК код при появлении запроса.


Java действительно имеет список системных свойств, чем в апплете не может прочитать:

  • java.класс.путь
  • java.главная
  • пользователь.реж.
  • пользователь.главная
  • user.name

Мое системное свойство, http.strictPostRedirect, нет в этом списке. Так почему же я не могу его прочесть?

Это и есть "краткий список" свойства, что песочница приложение. не умеет читать. Есть и еще много других. Например, ничто под user не допускается.1. Просто считайте их "типичными".

  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 не имела бы кода, который прозрачно пытается получить к нему доступ.

Верно. Смотрите исправление выше.