4.3. 配置可信安全域流
对于任何安全调用,都为安全域建立了安全身份。在处理调用时,Sec ureIdentity
与当前的线程关联。对于同一安全域中 getCurrentSecurityIdentity()
的后续调用,将返回关联的身份。
在应用服务器中,可以有多个 SecurityDomain
实例用于单个调用或线程。每个 SecurityDomain
实例都可以与不同的 SecurityIdentity
关联。当您调用该安全域的 getCurrentSecurityIdentity()
方法时,将返回正确的安全身份。部署可以在请求处理期间调用其他部署。每一部署与单个安全域关联。如果调用的部署使用相同的安全域,则当前安全身份的单一安全域的概念仍然存在。但是,每一部署都可以引用自己的安全域。
可以将与安全域关联的安全身份导入到另一个安全域,如下一节所述。
导入安全身份
要从安全域导入安全身份到另一个安全域,以获取此域的安全身份,有三种处理流程:
- 相同的安全域
- 安全域始终可以导入自己的安全身份。在这种情况下,安全域始终信任自身。
- Common Security Realm
- 在导入过程中,安全域从所导入的安全身份中提取主体,通过其配置的主体转换器和域映射器传递,并将其映射到该安全域中的身份。如果在创建身份的安全域中使用相同的安全域,则它们都使用相同的底层身份支持,并且导入也被接受。
- 可信安全域
- 如果身份映射成功,但没有通用的安全域,则将测试处理导入的安全域,以查看它是否信任原始的安全域。如果这样做,则接受导入。
该身份必须存在于处理导入的安全域中。安全身份绝对不会被完全信任。
流
安全域可以配置为自动将其安全身份输出到其他安全域。
在安全域中,如果建立安全身份并用于当前调用,则会迭代溢出安全域列表,并且为每个域导入安全身份。
此模型更适合使用不同安全域对部署的多次调用,例如,当 Web 应用使用通用安全域调用五个不同的 EJB 时。