doPriveledge 中的 AccessControlException
AccessControlException in doPriveledge
我们正在尝试使用以下代码从目录中获取文件数:
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。
在同一应用程序的另一部分,它在读取文件时给出相同的错误。
我们无法理解为什么代码会出现此错误,即使所有权限都已授予它。任何帮助将不胜感激。
我假设您在 WebSphere 上部署了 Web 应用程序,并且启用了 Java 2 安全性。
您应该在 EAR/META-INF/was.policy
文件中创建,内容如下(您的 codeBase
不正确):
grant codeBase "file:${application}" {
permission java.security.AllPermission;
};
如果操作正确,该文件应该会在安装过程中通过 Web 控制台显示。
有关为 WebSphere 应用程序创建策略文件的更多详细信息,请查看 Configuring the was.policy file for Java 2 security
发布对我有用的内容。
我们完整的应用程序没有部署在 Websphere 上。只有一部分代码与 Websphere 集成并收集了一些相关数据。
我们相信已经部署在 Websphere 上的其他一些 Web 应用程序可能已经启用 Java 2 安全性。
在 server.policy 和 java.policy 文件中添加了以下语句:
grant{
permission java.security.AllPermission;
};
请注意,这会授予在 Websphere 中执行任何操作的所有权限。
我们正在尝试使用以下代码从目录中获取文件数:
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。 在同一应用程序的另一部分,它在读取文件时给出相同的错误。 我们无法理解为什么代码会出现此错误,即使所有权限都已授予它。任何帮助将不胜感激。
我假设您在 WebSphere 上部署了 Web 应用程序,并且启用了 Java 2 安全性。
您应该在 EAR/META-INF/was.policy
文件中创建,内容如下(您的 codeBase
不正确):
grant codeBase "file:${application}" {
permission java.security.AllPermission;
};
如果操作正确,该文件应该会在安装过程中通过 Web 控制台显示。
有关为 WebSphere 应用程序创建策略文件的更多详细信息,请查看 Configuring the was.policy file for Java 2 security
发布对我有用的内容。
我们完整的应用程序没有部署在 Websphere 上。只有一部分代码与 Websphere 集成并收集了一些相关数据。 我们相信已经部署在 Websphere 上的其他一些 Web 应用程序可能已经启用 Java 2 安全性。 在 server.policy 和 java.policy 文件中添加了以下语句:
grant{
permission java.security.AllPermission;
};
请注意,这会授予在 Websphere 中执行任何操作的所有权限。