【发布时间】:2021-08-16 09:37:58
【问题描述】:
问题
我有一些代码与 Weblogic JMX Beans 交互以获得有效用户列表。此 JMX 调用需要访问权限,但我希望为未经身份验证的用户运行此操作。
我的代码设置如下,基本问题是@RunAs 是否是我可以实现这一目标的方式,我只需要找出放置映射的正确位置,或者我是否应该以不同的方式处理这个问题。
这是在 Weblogic 12.2.1.4 上,当前部署为 war 文件
代码
这用于验证 JSF 页面中的表单条目,这适用于经过身份验证的用户,我为 JMX bean 创建了 JMX 策略,但我想将其扩展到未经过身份验证的用户。
我有一个看起来像这样的类链
@Named
@ViewScoped
public class MyBackingBean {
@Inject
private MyBusinessBean myBusBean;
private List<String> users;
public void listUsers() {
users = myBusBean.listUsers();
}
}
@RequestScoped
public class MyBusinessBean {
@Inject
private MyServiceBean myServBean;
public List<String> listUsers() {
return myServBean.listUsers();
}
}
@RequestScoped
public class MyServiceBean {
public List<String> listUsers() {
// Some code here to accesss JMX bean
}
}
问题
对于未经身份验证的用户,服务方法失败并显示weblogic.management.NoAccessRuntimeException,我可以通过添加允许公共访问 JMX bean 的策略“修复”,但我显然宁愿避免这种情况。
四处挖掘我相信我可以告诉 Weblogic 使用 @RunAs 注释以不同的用户身份调用这些方法?我一直在玩这个,没有任何乐趣。
AIUI @RunAs 注解只能用于 EJB 而不是 CDI 托管 bean,所以我将服务 bean 更改为
@Stateless
@RunAs("MyRunAsRole")
public class MyServiceBean
在我看到的时候被捡起来
在 EJB 'MyServiceBean' 中,我们无法确定要使用的主体名称 对于作为角色运行的“MyRunAsRole”。 weblogic-ejb-jar 部署 描述符或相应的注解没有 run-as-principal-name...
但是我尝试映射它失败了。添加
<security-role>
<role-name>MyRunAsRole</role-name>
</security-role>
到 web.xml 和
<run-as-role-assignment>
<role-name>MyRunAsRole</role-name>
<run-as-principal-name>privUser</run-as-principal-name>
</run-as-role-assignment>
到 weblogic.xml
仍然给我关于无法映射到主体的错误。
run-as-role-assignment 肯定会被读取,因为当我忘记将角色添加到 web.xml 时,它抱怨安全角色不存在。
我也尝试将run-as-role-assignment 块添加到 weblogic-wjb-jar.xml 文件中,但也没有被拾取。
【问题讨论】: