Я пишу пользовательский LoginModule для javafx и получаю исключение AccessControlException, касающееся разрешений javafx. Это проблема с файлом политики? - PullRequest
0 голосов
/ 29 апреля 2020

Windows 10 - приглашение cmd: я создал простое приложение JavaFX, которое принимает имя пользователя и pw. Когда я пытаюсь запустить код, я получаю следующее сообщение об ошибке. Все, что должно происходить на начальном этапе, - это загрузка gui. Когда я запускаю этот код без security.manager, gui загружается и работает правильно, хотя экземпляр LoginContext не может быть создан. Но даже при работе с security.manager значение LoginContext не будет создано, пока в поля формы не будут введены данные и не будет нажата клавиша ввода. На этом раннем этапе LoginContext или LoginModule не должны играть никакой роли в этой проблеме .... Я думаю.

Cmd prompt:\TestLogin>java -classpath LoginMain.jar;TestLoginModule.jar 
-Djava.security.manager 
-Djava.security.policy==jaasPolicy.policy 
-Djava.security.auth.login.config==jaasConfig.config 
com.login.LoginGui

/* Login configuration file */
DbLogin {
  com.login.security.TestLoginModule required debug=true;
};


/* policy file */
grant codebase "file:./TestLoginModule.jar" {
    permission javax.security.auth.AuthPermission "modifyPrincipals";
};

grant codebase "file:./LoginMain.jar" {
   permission javax.security.auth.AuthPermission "createLoginContext.TestLoginModule";
};

grant codebase "file:./LoginMain.jar" {
   permission javax.security.auth.AuthPermission "createLoginContext.other";
};



    public static void main(String[] args) {

        try {
            /* testing Thread class vs Javafx thread */
            //Thread t = new Thread(()->{

            System.out.println("launching javafx");

            launch(args);
            /*
                System.out.println("Before sleep");
                try {
                    Thread.sleep(5000);
                }catch(InterruptedException ex) {

                }
                System.out.println("after sleep");
            });

            t.start();
            */
        }catch(Exception ex) {
            System.out.println("LoginGui.main -> error -> " + ex.getMessage());
        }

    }

Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "javafx.verbose" "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 com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:241)
        ... 5 more

Если мне нужно включить в файл политики следующее разрешение, java. util.PropertyPermission "javafx.verbose" "read" или какая-то его форма. Какой правильный синтаксис? Где и как в политике я могу установить это разрешение?

Я чувствую свой путь через этот процесс, создавая собственные модули LoginModules, рассчитывая на сообщения об ошибках, чтобы привести меня к земле обетованной.

...