我有以下代码来运行 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/