在 JSF Webapp 中以不同用户身份执行代码
Execute code as different user in JSF Webapp
问题
我有一些代码可以与 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
,我可以通过添加允许 public 访问的策略来 “修复” JMX bean,但我显然宁愿避免它。
四处挖掘我相信我可以告诉 Weblogic 使用 @RunAs
注释以不同用户的身份调用这些方法?我一直在玩这个没有乐趣。
AIUI @RunAs
注解只能与 EJB 一起使用,不能与 CDI 管理的 bean 一起使用,所以我将服务 bean 更改为
@Stateless
@RunAs("MyRunAsRole")
public class MyServiceBean
如我所见
In EJB 'MyServiceBean' we could not determine a principal-name to use
for the run-as-role 'MyRunAsRole'. The weblogic-ejb-jar deployment
descriptor or corresponding annotation has no 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 文件中,但也没有被拾取。
重要的一点是它被打包为 WAR 文件。
经过一些试验后,我通过在 WEB-INF
中放置一个 weblogic-wjb-jar.xml
文件而不是 META-INF
使它像上面那样工作
<weblogic-ejb-jar xmlns="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.6/weblogic-ejb-jar.xsd">
<run-as-role-assignment>
<role-name>MyRunAsRole</role-name>
<run-as-principal-name>privUser</run-as-principal-name>
</run-as-role-assignment>
</weblogic-ejb-jar>
@RolesAllowed
没有用,但这是另一个问题...
问题
我有一些代码可以与 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
,我可以通过添加允许 public 访问的策略来 “修复” JMX bean,但我显然宁愿避免它。
四处挖掘我相信我可以告诉 Weblogic 使用 @RunAs
注释以不同用户的身份调用这些方法?我一直在玩这个没有乐趣。
AIUI @RunAs
注解只能与 EJB 一起使用,不能与 CDI 管理的 bean 一起使用,所以我将服务 bean 更改为
@Stateless
@RunAs("MyRunAsRole")
public class MyServiceBean
如我所见
In EJB 'MyServiceBean' we could not determine a principal-name to use for the run-as-role 'MyRunAsRole'. The weblogic-ejb-jar deployment descriptor or corresponding annotation has no 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 文件中,但也没有被拾取。
重要的一点是它被打包为 WAR 文件。
经过一些试验后,我通过在 WEB-INF
中放置一个 weblogic-wjb-jar.xml
文件而不是 META-INF
<weblogic-ejb-jar xmlns="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.6/weblogic-ejb-jar.xsd">
<run-as-role-assignment>
<role-name>MyRunAsRole</role-name>
<run-as-principal-name>privUser</run-as-principal-name>
</run-as-role-assignment>
</weblogic-ejb-jar>
@RolesAllowed
没有用,但这是另一个问题...