java - 用于获取登录用户角色的客户端应用程序 (JAAS)

标签 java jboss jaas

我有以下代码来运行 Java (SE) 应用程序(不在服务器上),其中应该使用运行 JAAS 身份验证的现有 JBoss 服务器(我绑定(bind)到 4.2.3)来完成登录。我从一个简单的控制台应用程序开始执行登录,然后将此功能集成到应用程序中。

我使用了一个片段 - 找到 here - 执行登录:

JaasJbossConfiguration.activateConfiguration();
UsernamePasswordHandler handler =
  new UsernamePasswordHandler("userName", "passWord");
LoginContext lc = new LoginContext("myrealm", handler);
try {
     lc.login();
} catch (LoginException e) {
 // Authentication failed.
}

这就像一个魅力。现在我想扩展我的应用程序并仅允许具有特殊角色的用户访问。有没有办法从 Java 应用程序端获取用户的角色或仅允许这些用户进行身份验证?

最佳答案

  • 如果(自定义)登录模块进行检查,您可以阻止基于(不存在)角色的身份验证。
  • 但通常情况下,如果存在具有匹配密码的用户,则该用户将通过身份验证(可能根本没有角色)。因此,通常身份验证(用户/密码)与授权(角色)不相关。
<小时/>
  • 在 EJB 中,您可以使用基于角色的声明性授权(请参阅@RolesAllowed)
  • 对于 EJB:您可以在 EJB 中调用 EJBContext.getCallerPrincipal()EJBContext.isUserInRole()
  • 对于 servlet/JSP:您可以调用 HttpServletRequest.getRemoteUser()HttpServletRequest.isUserInRole()
  • 对于独立应用程序,我不知道有 API。
  • 因此标准 API 只允许检查角色。如果你想获取角色列表,没有官方API。

无论如何,请查看登录模块的源代码(例如:DatabaseServerLoginModule)。然后编写一个 EJB,它执行相同的操作(关于角色查找),并将角色列表返回到您的独立应用程序。

关于java - 用于获取登录用户角色的客户端应用程序 (JAAS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18316923/

相关文章:

java - Java中的基本变量的地址真的无法获取吗?

tomcat - 如何将在 Liferay Tomcat bundle 中开发的 portet 部署到 Jboss bundle

java - 如何处理由容器而不是应用程序发送的 404 错误

Java EE 6 登录模块

java - 如何在基于 Java 的自定义 Web 服务器中集成 Windows 身份验证 (SSO)?

java - Boncode AJP13 - 一般连接器通信错误

java - 将Java连接到MySQL数据库

java - JBoss 中的数据源未选择正确的类

java - 解密 OpenLDAP 密码

java - Solaris 10 64 位上的 Jenkins