在JSF Web应用程序中以不同用户身份执行代码



问题

我有一些代码与Weblogic JMX Beans交互,以获得有效用户的列表。此JMX调用需要访问权限,但我希望为未通过身份验证的用户运行此调用。

我的代码设置如下,基本问题是@RunAs是否是我实现这一目标的方法,我只需要找出放置映射的正确位置,或者我是否应该以不同的方式来处理这一问题。

这在Weblogic 12.2.1.4上,目前作为战争文件部署

代码

这用于验证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
}
}

问题

对于未经认证的用户,服务方法以CCD_ 2失败;"修复"添加了一个允许公共访问JMX bean的策略,但我显然宁愿避免这种情况。

仔细研究,我相信我可以告诉Weblogic使用@RunAs注释以不同的用户身份调用这些方法?我一直在玩这个,一点也不高兴。

AIUI@RunAs注释只能与EJB一起使用,而不能与CDI管理的bean一起使用,所以我将服务bean更改为

@Stateless
@RunAs("MyRunAsRole")
public class MyServiceBean

当我看到时,它被拾取了

在EJB"MyServiceBean"中,我们无法确定要使用的主体名称作为角色"MyRunAsRole"运行。weblogic ejb jar部署描述符或相应的注释没有作为主体名称运行。。。

但我尝试映射它失败了。添加

<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不起作用,但这是另一个问题。。。

相关内容

  • 没有找到相关文章

最新更新