代码之家  ›  专栏  ›  技术社区  ›  Joshua Fox

如何在代码中的任意点访问JAAS角色?

  •  4
  • Joshua Fox  · 技术社区  · 16 年前

    我想访问在我的SOAP应用程序中具有角色的完整用户模型。例如,我可能想知道名为“fred”的用户的角色。

    如何进入某种全局JAAS注册表并执行(伪代码) globalregistry.getuser(“fred”).getprincipals()。 ?(注意,在JAAS中,角色由 校长 )

    我知道如何得到 校长 主体 登录上下文 但这有两个问题。

    1. 它只是在登录的时候,我不希望对上述注册表进行编码并存储 主体 校长 对象本身,因为它们已经由AppServer存储。
    2. 最好,即使弗雷德不是当前用户,我也希望能够访问此信息。

    我正在使用突堤式码头,但我认为这些行为是JAAS的标准。

    5 回复  |  直到 11 年前
        1
  •  3
  •   Robin    16 年前

    我们使用一个threadlocal变量来引用在系统入口点(在我们的例子中是servlet或ejb)经过身份验证的当前用户。这允许“全局”访问当前用户。这不直接绑定到JAAS或任何其他安全协议,但可以从它们初始化。

    编辑:threadlocal返回是当前用户的主题。

    访问其他用户通常是通过某种类型的管理模块完成的。

        2
  •  5
  •   Tom Anderson    13 年前

    我看到的模式是:

    AccessControlContext acc = AccessController.getContext();
    Subject subject = Subject.getSubject(acc);
    Set<Principal> principals = subject.getPrincipals();
    

    本质上,这会找到当前与当前线程关联的主题,并请求其主体。

    其中一个例子就是 Apache Jackrabbit RepositoryImpl . 它在 extendAuthentication 方法,其任务是在创建新会话时确定当前线程具有哪些jackrabbit权限(我认为)。

    但是,我应该注意到,这可能不一定实际工作,至少在J2EE环境中是这样。我在jboss as7下使用这段代码,它找不到主题。不过,这可能只是一个错误。

        3
  •  1
  •   david a.    16 年前

    在我看来,这似乎使AppSever的用户、组等具有J2EE应用程序角色。

    • 获取certaion用户的权限是一项管理任务,通常必须使用特定于AppServer的API来完成。
    • JAAS编程模型在更高级别的Abstracion上工作。它只提供用户是否处于J2EE角色(在应用程序中定义)的信息。
        4
  •  1
  •   mezmo    15 年前

    我相信JAAS的目的是不允许你做你想做的事情。我知道在我构建的应用程序中,我需要这样的功能,我必须将步骤jaas和程序直接放到实际的身份存储库中,无论它是LDAP、ActiveDirectory还是其他什么。

        5
  •  0
  •   Daniel De León    11 年前

    在EJB中使用

    @Resource(mappedName = "java:comp/EJBContext")
    protected SessionContext sessionContext;
    

    并尝试 context.lookup("java:comp/EJBContext" 在任何时候。


    此代码是针对JBoss服务器系列的,供其他人在JNDI中查找。