【问题标题】:Any way to retrieve the User Roles in a Servlet 3+ environment?有什么方法可以在 Servlet 3+ 环境中检索用户角色?
【发布时间】:2017-04-13 17:37:30
【问题描述】:

根据SO and the web 上的其他帖子,似乎 Servlet 3+ 容器中没有内置机制来从登录用户那里检索角色,而只是检查用户是否在角色:request.isUserInRole(String)

但是有没有办法检索为应用程序定义的安全角色列表?

我觉得奇怪的是 LoginModule 必须保留委托人的凭据,但没有任何定义/与委托人的角色相关。在某些时候,当您调用isInRole() 时,容器必须能够检查用户分配的角色列表。这些信息没有暴露在任何地方吗?

我似乎找不到任何机制可以让我从我的部署描述符(或通过注释)中检索定义的角色。我的目标是 Wildfly 10/Undertow,但理想情况下是寻找与容器无关的解决方案。

这甚至可行吗?是否有任何简单的方法可以以编程方式检索我的应用程序中定义的security-roles(在我的描述符中定义或通过@DeclareRoles 注释定义)?

【问题讨论】:

  • @RC。这个问题实际上并没有回答那里的问题(我实际上在我的问题中链接到它)。建议要么做一些特定于 weblogic 的事情,要么在应用程序中手动构建角色列表。但它没有指定是否/如何从容器中检索它们。我怀疑一定有一种机制,但不确定是哪一种。
  • 您可以使用this post 之类的东西来阅读所有注释。最终,尽管这不是 JEE 规范的一部分,所以没有平台无关的方式来获得它。也有一些可能的安全后果 - 我应该知道我所扮演的所有角色吗?对此不确定,但同样,规范在这里对您没有帮助。
  • @EricB。也许,这就是为什么没有结束你的问题。请注意,接受的答案不是特定于 weblogic 的(但我同意可能有点矫枉过正)

标签: java authentication jakarta-ee wildfly


【解决方案1】:

为了检索 @rolesAllowed 注释,我使用了自省。 您可以通过注释来检索定义的角色。 示例中的引用 this 是一个 Servlet。

ServletSecurity ss = this.getClass().getAnnotation(ServletSecurity.class);
for (String role : ss.value().rolesAllowed() ) {
        out.print(role + " ");
}

servlet 中的注释是:

@WebServlet(name = "Coquito", urlPatterns = {"/Coquito"})
@ServletSecurity (@HttpConstraint( rolesAllowed= {"nuevo_menu_intranet"}))
public class Coquito extends HttpServlet {
}

【讨论】:

    猜你喜欢
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    相关资源
    最近更新 更多