Java 带有复杂代码的Subject.doAs

Java 带有复杂代码的Subject.doAs,java,security,jaas,Java,Security,Jaas,在javadocs中,它声明调用AccessController.doPrivileged() 在javadocs for AccessController.doPrivileged中进一步说明 在使用“privileged”构造时要非常小心,并始终记住使privileged代码部分尽可能小 那么,在特权结构中包含代码意味着什么呢?特权结构甚至不在小范围内 Subject.doAs的要点是更改当前AccessControlContext(acc)的Subject。它不应更改权限。doAs的API

在javadocs中,它声明调用AccessController.doPrivileged()

在javadocs for AccessController.doPrivileged中进一步说明

在使用“privileged”构造时要非常小心,并始终记住使privileged代码部分尽可能小


那么,在特权结构中包含代码意味着什么呢?特权结构甚至不在小范围内

Subject.doAs的要点是更改当前
AccessControlContext
(acc)的
Subject
。它不应更改权限。
doAs
的API文档说“使用检索到的上下文”,如果您查看源代码,它将来自
AccessController.getContext
的acc与主题相结合

事实上,acc需要获得特权才能使呼叫成功


使用提升权限运行的大部分代码的问题在于,它与最小权限原则相反。对手在某个地方进行恶意操作的可能性增加。

上下文不是具体的代码大小/loc,而是代码上特权构造的覆盖范围。您必须绝对确保不会意外地覆盖不应该以该权限执行的代码。这现在是有意义的。这不是保持代码段小的技术原因,而是与操作的性质有关。正如BalusC在上面提到的,确保代码覆盖率不会超出应该执行的边界。太好了,谢谢你们两位。。。