【问题标题】:Get all users and roles in Java webapp获取Java webapp中的所有用户和角色
【发布时间】:2015-10-17 03:51:43
【问题描述】:

问题:

  • 是否存在对 Servlet 容器通用的用户和角色概念?
  • 如果是这样,是否有与容器无关的方式来访问这些用户和角色?
  • 如果没有,有没有办法访问 Tomcat Realm 用户和角色?

背景:

我想从 Java webapp 上下文(Servlet 容器)获取所有用户和他们的角色,或者更好的是,直接查询用户和他们的角色。

如果您知道连接字符串,我看到有像 Apache Directory 这样的项目可以让您为 LDAP 执行此操作。但是,我希望对服务于用户和角色的技术保持不可知论。

具体来说,我在 Tomcat 上,在最简单的情况下,我想访问 a) tomcat-users.xml b) 上下文中任何其他配置的 Realm 中的用户和角色。但是,我真的在寻找一个不特定于 Tomcat 的解决方案,它是 Realms

【问题讨论】:

  • Servlet 只关心给定请求的安全上下文,因此您可以确定谁在调用并获取有关它们的一些详细信息。您要问的实际上是 servlet 规范不知道或不关心的目录(LDAP/Database/whatever)。 JNDI 可能是用于访问目录的通用 API 的最佳选择(尽管您需要实现 Realm 或类似 Realm 的组件才能真正挖掘从 JNDI 返回的对象)。

标签: java tomcat user-roles servlet-container


【解决方案1】:

在 tomcat(或任何其他 conytainer)中(使用 std.Servlet API),直接访问用户角色是不可能的(不使用 tomcat/第三方特定机制)。 getUserPrincipal 和 isUSerInRole 是两个方法,不能直接访问角色列表。

由于 API 未提供此类访问权限,我猜您将不得不依赖其他特定于容器或技术的机制。

正如您所指出的,如果配置的领域是 JNDI 领域并且领域存储是通过 LDAP 实现的,则可以编写一个 servlet 过滤器并从 LDAP 获取角色并将它们设置在会话或线程上本地。

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 2014-05-08
    • 2013-10-29
    • 2016-04-17
    • 1970-01-01
    • 2014-04-24
    相关资源
    最近更新 更多