0

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

我使用一个片段 - 在这里找到- 来执行登录:

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

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

4

2 回答 2

2
  • 如果(自定义)登录模块检查它,您可以阻止基于(不存在的)角色的身份验证。
  • 但通常情况下,如果有密码匹配的用户,则该用户已通过身份验证(可能根本没有角色)。因此,通常身份验证(用户/密码)与授权(角色)无关。

  • 在 EJB 中,您可以使用基于角色的声明式授权(请参阅 参考资料@RolesAllowed
  • 至于 EJB:您可以在 EJBEJBContext.getCallerPrincipal()中调用EJBContext.isUserInRole()
  • 至于 servlet/JSP:你可以调用HttpServletRequest.getRemoteUser()HttpServletRequest.isUserInRole()
  • 至于独立应用程序,我不知道 API。
  • 所以标准 API 只允许检查一个角色。如果要获取角色列表,没有官方 API。

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

于 2013-08-21T18:52:37.577 回答
0

按照以下步骤利用容器(主要是 JAAS)提供的 JEE 安全性。优点是,您只需配置即可将身份验证和授权更改为任何新技术,而不会影响应用程序的其他部分。我举一个使用 JBoss AS 的例子

  1. 在 web.xml 中添加安全约束

    Web 资源 /* ROLE_ADDUPDATE ROLE_SEARCH ROLE_ADMIN ROLE_ADMIN ROLE_ADDUPDATE ROLE_SEARCH

  2. 在 jboss-web.xml 中添加 Jboss Security 域名

    java:/jaas/其他真

    • 在 application-users.properties 和 applications-roles.properties 中添加用户和角色(参见 Jboss 的命令行界面文档)
    • 如果您使用 EJB,您甚至可以使用 @RolesAllowed、@PermitAll、@DenyAll 等在 EJB 方法级别进行细粒度授权
于 2015-12-02T03:08:25.533 回答