AccessController.doPrivileged

时间:2009-05-12 12:16:40

标签: java security api java-ee

我想弄清楚一些遗留代码在做什么。这条线到底在做什么,为什么我会这样需要呢?

String lineSeparator = (String) java.security.AccessController.doPrivileged(
       new sun.security.action.GetPropertyAction("line.separator")); 

我在Weblogic 8上运行的web / ejb应用程序的logger实现中找到了它。据我所知,没有启用特殊的安全策略。 (我不喜欢从sun。*包中导入,所以我想摆脱这一行; - )

1 个答案:

答案 0 :(得分:31)

它只是获得系统属性。检索系统属性需要调用代码可能没有的权限。 doPrivileged断言调用类的特权,而不管它是如何被调用的。显然,doPrivileged是您需要小心的事情。

引用的代码相当于:

String lineSeparator = java.security.AccessController.doPrivileged(
    new java.security.PrivilegedAction<String>() {
        public String run() {
            return System.getProperty("line.separator");
        }
    }
 );

(难道你不喜欢Java语法的简洁性吗?)

如果没有声明权限,可以将其重写为:

String lineSeparator = System.getProperty("line.separator");