【问题标题】:Execute code as different user in JSF Webapp在 JSF Webapp 中以不同用户身份执行代码
【发布时间】: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 文件中,但也没有被拾取。

【问题讨论】:

    标签: java jsf ejb


    【解决方案1】:

    重要的是它被打包为 WAR 文件。

    经过一些试验,我通过将weblogic-wjb-jar.xml 文件放在WEB-INF 而不是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 没用,但这是另一个问题...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 2014-10-25
      • 2020-08-01
      相关资源
      最近更新 更多