我正在编写一个javafx自定义LoginModule,并收到以下关于javafx权限的AccessControlException。这是策略文件的问题吗?

问题描述 投票:0回答:1

Windows 10 - cmd prompt:我已经创建了一个简单的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",或者某种形式。正确的语法是什么?在policy中的哪里和如何设置这个权限?

我正在摸索这个过程,建立自定义的LoginModules,指望错误信息把我带到承诺之地。

java policy jaas
1个回答
0
投票
grant codeBase "file:javafx-sdk-11/lib/javafx.base.jar" {
    permission java.security.AllPermission;
};
grant codeBase "file:javafx-sdk-11/lib/javafx.controls.jar" {
    permission java.security.AllPermission;
};
grant codeBase "file:javafx-sdk-11/lib/javafx.fxml.jar" {
    permission java.security.AllPermission;
};
grant codeBase "file:javafx-sdk-11/lib/javafx.graphics.jar" {
    permission java.security.AllPermission;
};
grant codeBase "file:javafx-sdk-11/lib/javafx.media.jar" {
    permission java.security.AllPermission;
};
grant codeBase "file:javafx-sdk-11/lib/javafx.swing.jar" {
    permission java.security.AllPermission;
};
grant codeBase "file:javafx-sdk-11/lib/javafx.web.jar" {
    permission java.security.AllPermission;
};

这应该可以解决你的问题。一个很好的指导,你是检查出的bug.openjdk.java.net他们有一个解决的& 未解决的bug.^^的集合。

© www.soinside.com 2019 - 2024. All rights reserved.