我们当前的应用程序使用 JSF/JPA 技术,部署在 Weblogic 12.1.2 上,执行以下操作:
- 通过 IDP 对用户进行身份验证
- 对用户进行身份验证后的 IDP 会发回用户所属的组 使用 Web.xml
- 和 WebLogic.xml我们将组映射到角色
我们的应用程序范围角色非常精细,它帮助我们执行以下操作:
- 隐藏 UI 上的 UI 页面或组件
- 在方法上使用角色允许的注释
由于组到角色映射是在 Weblogic.xml 中,因此我们的应用程序用户无法更改组到角色的映射,这是我必须解决的问题。
我的目标是执行以下操作:
- 通过我们的 IDP 对用户进行身份验证
- IDP 将向我们发送用户所属的组
- 定义 Web 中的角色.xml
- 定义应用程序将读取以查找组到角色映射的表
- 使用 Weblogic API 执行组到角色映射
- 创建一个 UI 以允许我们的用户将组更改为角色映射
遇到的问题是我找不到如何使用 WebLogic 动态执行组到角色映射,因为我无法访问 WebLogic API,该 API 将允许我在部署的应用程序中更改组到角色映射。以前有人这样做过吗?
我已经考虑过创建自定义角色映射器,但我不确定如何在我们部署的应用程序中获取此自定义角色映射器的句柄。
从Java EE 7开始,基于此线程,这是不可能的。Java EE 服务器上的动态角色
如果有人确实希望将此功能添加到 Java EE 8 中,请为 Java EE 8 中的以下两个开放功能请求投票
https://java.net/jira/browse/JAVAEE_SECURITY_SPEC-8https://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 添加到服务器类路径中,并且实现在服务器启动时可用。