当前位置: 首页 > 面试题库 >

AccessController.doPrivileged

能修谨
2023-03-14
问题内容

我试图找出一些遗留代码在做什么。这条线到底在做什么,为什么我需要这种方式?

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

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


问题答案:

它只是获得系统属性。检索系统属性需要调用代码可能没有的权限。在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");


 类似资料:

相关阅读

相关文章

相关问答