我想在我的SOAP应用程序中访问其角色的完整用户模型.例如,我可能想知道名为"Fred"的用户的角色.
我如何进入某种全局JAAS注册表并执行(伪代码) globalRegistry.getUser("Fred").getPrincipals()?(请注意,在JAAS中,角色由Principal表示.)
我知道如何获得校长的的 主题从LoginContext的,但有两个问题.
它只是在登录时,我不想编写上述注册表并自己存储Subject和Principal对象,因为它们已经由appserver存储.
优选地,即使Fred不是当前用户,我也希望能够访问该信息.
我正在使用Jetty,但我认为这些行为是JAAS的标准.
我见过的模式是:
AccessControlContext acc = AccessController.getContext(); Subject subject = Subject.getSubject(acc); Setprincipals = subject.getPrincipals();
从本质上讲,它会找到当前与当前线程关联的主题,并询问其主体.
使用它的一个例子是Apache Jackrabbit的RepositoryImpl.它位于该extendAuthentication
方法中,其工作是确定当前线程在创建新会话时具有的Jackrabbit权限(我认为).
但是,我应该注意到,这可能不一定有效,至少在J2EE上下文中是这样.我在JBoss AS7下使用这个代码,它没有找到主题.但这可能只是一个错误.