0

我们正在尝试使用以下代码从目录中获取文件数:

   File dataDir = new File(dataHome);
            final File privdataDir = dataDir;
            System.out.println("The datadir is : \n"+dataDir+"The privdataDir is : \n"+privdataDir);
            int count = 0;
            final int[] privcount = {0};


            if (privdataDir != null) {
                System.out.println("Going into doPriveledge block");
            AccessController.doPrivileged(new PrivilegedAction() {
                public Object run()
                {

                    privcount[0] = privdataDir.list().length;
                    return null;

                }
            });
            }

            count = privcount[0];
            System.out.println("The count is : "+count);

dataDir 变量引用路径:C:\MyApp\config 它在代码的以下行抛出 AccessControlException:

privcount[0] = privdataDir.list().length;

例外是:

[ERROR][SmartlinkThread] 2015-03-18 07:22:59.0862 GMT: SmartlinkThread: Error processing agg interval: java.security.AccessControlException: Access denied (java.io.FilePermission C:\MyApp\config read) <AggIntervalTaskThread>
[ERROR][SmartlinkThread] 2015-03-18 07:22:59.0862 GMT: java.security.AccessControlException: Access denied (java.io.FilePermission C:\MyApp\config read) <AggIntervalTaskThread>
[ERROR][SmartlinkThread] 2015-03-18 07:22:59.0863 GMT:  at java.security.AccessController.checkPermission(AccessController.java:132) <AggIntervalTaskThread>
[ERROR][SmartlinkThread] 2015-03-18 07:22:59.0863 GMT:  at java.lang.SecurityManager.checkPermission(SecurityManager.java:544) <AggIntervalTaskThread>
[ERROR][SmartlinkThread] 2015-03-18 07:22:59.0863 GMT:  at java.lang.SecurityManager.checkRead(SecurityManager.java:883) <AggIntervalTaskThread>
[ERROR][SmartlinkThread] 2015-03-18 07:22:59.0863 GMT:  at java.io.File.list(File.java:982) <AggIntervalTaskThread>

以下内容已经添加到 java.policy 文件和 server.policy 文件中

grant codeBase "file:C:/MyApp/-" {
permission java.security.AllPermission;
};            

此代码正在为 IBM Websphere 8.0.x 运行。在同一应用程序的另一部分,它在读取文件时给出了相同的错误。即使已经授予了所有权限,我们也无法理解为什么代码会出现此错误。任何帮助,将不胜感激。

4

2 回答 2

0

发布对我有用的东西。

我们完整的应用程序没有部署在 Websphere 上。它只有一部分代码与 Websphere 集成并收集一些相关数据。我们相信已经部署在 Websphere 上的其他一些 Web 应用程序可能已经启用了 Java 2 安全性。在 server.policy 和 java.policy 文件中添加了以下语句:

grant{
permission java.security.AllPermission;
};

请注意,这将授予一切在 Websphere 中执行任何操作的权限。

于 2015-04-23T05:03:31.320 回答
0

我假设您有部署在 WebSphere 上的 Web 应用程序,并且启用了 Java 2 安全性。

您应该在EAR/META-INF/was.policy文件中创建以下内容(您的内容codeBase不正确):

grant codeBase "file:${application}" {
  permission java.security.AllPermission;
};

如果您正确执行此操作,则应在安装期间通过 Web 控制台显示此文件。

有关为 WebSphere 应用程序创建策略文件的更多详细信息,请查看为 Java 2 安全性配置 was.policy 文件

于 2015-03-19T09:25:20.313 回答