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

Posted

技术标签:

【中文标题】我正在编写一个 javafx 自定义 LoginModule 并收到以下关于 javafx 权限的 AccessControlException。这是政策文件问题吗?【英文标题】:I'm writing a javafx custom LoginModule and receive the below AccessControlException concerning javafx permissions. Is this a policy file issue? 【发布时间】:2020-04-29 12:04:28 【问题描述】:

Windows 10 - cmd 提示符: 我创建了一个接受用户名和密码的简单 JavaFX 应用程序。当我尝试运行代码时,我收到以下错误消息。 最初应该发生的只是加载 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,依靠错误消息将我带到应许之地。

【问题讨论】:

【参考方案1】:
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;
;

这应该可以解决您的问题 .一个很好的指南是查看 bugs.openjdk.java.net 他们有一系列已解决和未解决的错误。^^

【讨论】:

以上是关于我正在编写一个 javafx 自定义 LoginModule 并收到以下关于 javafx 权限的 AccessControlException。这是政策文件问题吗?的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX 自定义图表类 - 如何将节点的 layoutX 和 layoutY 属性绑定到 NumberAxis 的显示位置?

带有 StackPane 和自定义控件的 Javafx TabPane

如何扩展 JavaFX Shape 类以实现自定义形状

JavaFX 自定义节点不呈现子节点

如何使用自定义对象在 JavaFX 中填充 ListView?

JavaFx SceneBuilder 2.0 无法解析自定义控件