Weblogic 12 - 在已部署的应用程序中将作用域角色更改为组映射

Weblogic 12 - Changing Scoped Role to Group mapping in the deployed application

我们当前的应用程序使用 JSF/JPA 技术并部署在 Weblogic 12.1.2 上并执行以下操作:

  1. 通过 IDP 验证用户
  2. IDP认证用户后发回用户所属组
  3. 使用 Web.xml 和 WebLogic.xml 我们将组映射到角色

我们的 Application Scoped 角色非常精细,它可以帮助我们执行以下操作:

  1. 在 UI
  2. 上隐藏 UI 个页面或组件
  3. 在方法上使用 RolesAllowed 注释

由于组到角色的映射在 Weblogic.xml 中,我们的应用程序用户无法更改组到角色的映射,这是我必须解决的问题。

我的目标是做到以下几点:

  1. 通过我们的 IDP 验证用户
  2. IDP 将向我们发送用户所属的群组
  3. 定义 web.xml
  4. 中的角色
  5. 定义我们的应用程序将读取以查找组到角色映射的表
  6. 使用 Weblogic API 进行组到角色的映射
  7. 创建一个 UI 以允许我们的用户将组更改为角色映射

我 运行 遇到的问题是我无法找到如何使用 WebLogic 动态地进行组到角色映射,因为我无法访问允许的 WebLogic API我在部署的应用程序中将组更改为角色映射。有人做过吗?

我看过创建自定义角色映射器,但我不确定如何在我们部署的应用程序中获取此自定义角色映射器的句柄。

从 Java EE 7 开始,基于此线程这是不可能的 dynamic roles on a Java EE server

如果有人确实希望将此功能添加到 Java EE 8,请为 Java EE 8

中的以下两个开放功能请求投票

https://java.net/jira/browse/JAVAEE_SECURITY_SPEC-8 https://java.net/jira/browse/JASPIC_SPEC-22

不是一个具体的答案,但可以使用 Weblogic 特定的解决方案来完成。

查看示例: https://docs.oracle.com/cd/E13212_01/wles/docs42/dvspisec/examples.html

您必须实现 getRoles 方法:

import weblogic.security.spi.RoleMapper;
import weblogic.security.spi.RoleProvider;

public final class MyRoleMapperProviderImpl implements RoleProvider, RoleMapper 
{
   public Map getRoles(Subject subject, Resource resource,
      ContextHandler handler)
   {
      ...
   }
}

您也可以为其生成一个 MBean 以建立自动加载: https://docs.oracle.com/middleware/1213/wls/DEVSP/generate_mbeantype.htm#DEVSP617

java -DMDF=xmlfile -Dfiles=filesdir -DcreateStubs=true
weblogic.management.commo.WebLogicMBeanMaker

可以将结果作为 jar 添加到服务器类路径,并在服务器启动时实现。