【问题标题】:How do I access JAAS roles at arbitrary point in the code?如何在代码中的任意位置访问 JAAS 角色?
【发布时间】:2010-10-06 10:46:32
【问题描述】:

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

我如何进入某种全局 JAAS 注册表并执行(伪代码)globalRegistry.getUser("Fred").getPrincipals()? (请注意,在 JAAS 中,角色由 Principal 表示。)

我知道如何从 LoginContext 中获取 SubjectPrincipal,但这有两个问题。

  1. 仅在登录时,我不希望自己编写上述注册表并存储 SubjectPrincipal 对象,因为它们已经是由应用服务器存储。
  2. 最好,即使 Fred 不是当前用户,我也希望能够访问此信息。

我正在使用 Jetty,但我认为这些行为是 JAAS 的标准行为。

【问题讨论】:

    标签: java security jaas role security-roles


    【解决方案1】:

    在 EJB 中使用

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

    随时尝试context.lookup("java:comp/EJBContext")。


    此代码适用于 JBoss 服务器系列,其他人可以在 JNDI 中查找。

    【讨论】:

      【解决方案2】:

      我看到的一个模式是:

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

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

      Apache JackrabbitRepositoryImpl 中使用了一个例子。它在extendAuthentication 方法中,其工作是确定当前线程在创建新会话时拥有哪些 Jackrabbit 权限(我认为)。

      但是,我应该注意,这可能不一定真的有效,至少在 J2EE 环境中是这样。我在 JBoss AS7 下使用此代码,但找不到主题。不过,这可能只是一个错误。

      【讨论】:

        【解决方案3】:

        我相信 JAAS 的设计目的是不允许您尝试做任何事情。我知道在我构建的应用程序中,我需要那种我必须绕过 JAAS 并直接编程到任何实际身份存储库的功能,无论是 LDAP、ActiveDirectory 还是其他任何东西。

        【讨论】:

          【解决方案4】:

          我们使用一个 ThreadLocal 变量来引用当前用户,因为它已经在系统入口点(在我们的例子中是一个 servlet 或 ejb)进行了身份验证。这允许对当前用户进行“全局”访问。这与 JAAS 或任何其他安全协议没有直接关联,但可以通过它们进行初始化。

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

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

          【讨论】:

            【解决方案5】:

            在我看来,这似乎将 appever 的用户、组等与 J2EE 应用程序角色混为一谈。

            • 获取特定用户的权限是一项管理任务,通常必须使用特定于应用服务器的 API 来完成。
            • JAAS 编程模型适用于更高层次的抽象。它仅提供用户是否处于 J2EE 角色(在应用程序中定义)的信息

            【讨论】:

              猜你喜欢
              • 2013-11-13
              • 2011-05-17
              • 1970-01-01
              • 1970-01-01
              • 2017-03-28
              • 1970-01-01
              • 2014-03-20
              • 1970-01-01
              • 2013-04-04
              相关资源
              最近更新 更多