Java AccessController.doPrivileged

Java AccessController.doPrivileged,java,security,api,jakarta-ee,Java,Security,Api,Jakarta Ee,我试图弄清楚一些遗留代码在做什么。这条线到底在做什么,为什么我需要它 String lineSeparator = (String) java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("line.separator")); 我在运行在WebLogic8上的web/ejb应用程序的记录器实现中找到了它。据我所知,没有启用特殊的安全策略。(我不喜欢从sun.*

我试图弄清楚一些遗留代码在做什么。这条线到底在做什么,为什么我需要它

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

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

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

引用的代码相当于:

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

(我非常同意不使用私有API中的类。此类类可能会随时更改或消失,恕不另行通知。)“\n”最多“\r\n”,旧时代..@Tom,“doPrivileged声明调用类的特权,而不管它是如何调用的。”这是什么意思?你能举个例子吗?我想我的意思是不考虑当前访问控制上下文的权限。因此,通常在调用受信任的方法时,该方法可用的权限是调用该方法时使用的权限
doPrivileged
重新启动(尽管它确实包含直接调用方的权限限制)。
String lineSeparator = System.getProperty("line.separator");