AccessController.doPrivileged
我试图找出一些遗留代码正在做什么。 这条线到底在做什么,为什么我会这样需要呢?
String lineSeparator = (String) java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("line.separator"));
我在Weblogic 8上运行的web / ejb应用程序的logger实现中找到了它。据我所知,没有启用特殊的安全策略。 (我不喜欢从sun。*包中导入,所以我想摆脱这条线;-)
它只是获得一个系统属性。 检索系统属性需要调用代码可能没有的权限。 doPrivileged
声明了调用类的特权,而不管它是如何被调用的。 显然, doPrivileged
是你需要小心的事情。
引用的代码相当于:
String lineSeparator = java.security.AccessController.doPrivileged( new java.security.PrivilegedAction() { public String run() { return System.getProperty("line.separator"); } } );
(难道你不喜欢Java语法的简洁性吗?)
如果没有声明权限,可以将其重写为:
String lineSeparator = System.getProperty("line.separator");