Java 如何在代码中的任意点访问JAAS角色?
我想访问我的SOAP应用程序中具有角色的完整用户模型。例如,我可能想知道名为“Fred”的用户的角色 如何进入某种全局JAAS注册表并执行(伪代码)globalRegistry.getUser(“Fred”).getPrinciples()?(请注意,在JAAS中,角色由主体表示。) 我知道如何从LoginContext中获取主题的主体,但这有两个问题Java 如何在代码中的任意点访问JAAS角色?,java,security,jaas,role,security-roles,Java,Security,Jaas,Role,Security Roles,我想访问我的SOAP应用程序中具有角色的完整用户模型。例如,我可能想知道名为“Fred”的用户的角色 如何进入某种全局JAAS注册表并执行(伪代码)globalRegistry.getUser(“Fred”).getPrinciples()?(请注意,在JAAS中,角色由主体表示。) 我知道如何从LoginContext中获取主题的主体,但这有两个问题 这只是在登录时,我不希望对前面提到的注册表进行编码,而是自己存储Subject和Principal对象,因为它们已经由appserver存储 最
我正在使用Jetty,但我认为这些行为是JAAS的标准行为。对我来说,这似乎使appsever的用户、组等与J2EE应用程序角色结合起来
- 获取特定用户的权限是一项管理任务,通常必须使用特定于appserver的API来完成
- JAAS编程模型在更高的抽象层次上工作。它仅提供用户是否处于J2EE角色(在应用程序中定义)的信息
访问其他用户通常会通过某种类型的管理模块来完成。我认为JAAS的设计目的是不允许您真正尝试做的事情。我知道,在我构建的应用程序中,我需要那种功能,我必须绕过step JAAS,直接编程到实际的身份存储库中,无论是LDAP、ActiveDirectory还是其他什么。我看到的一种模式是:
AccessControlContext acc = AccessController.getContext();
Subject subject = Subject.getSubject(acc);
Set<Principal> principals = subject.getPrincipals();
AccessControlContext acc=AccessController.getContext();
Subject-Subject=Subject.getSubject(acc);
Set principals=subject.getPrincipals();
本质上,这会找到当前与当前线程关联的主题,并请求其主体
这一用法的一个例子是在。它位于扩展身份验证
方法中,该方法的工作是确定当前线程在创建新会话时拥有的Jackrabbit权限(我认为)
然而,我应该注意到,至少在J2EE上下文中,这可能并不一定真正起作用。我在JBossAS7下使用这段代码,但找不到主题。不过,这可能只是一个bug。在EJB使用中
@Resource(mappedName = "java:comp/EJBContext")
protected SessionContext sessionContext;
并在任何时候尝试使用context.lookup(“java:comp/EJBContext”
)
这段代码适用于JBoss服务器系列,其他人可以在JNDI中找到它