2

在我的 Java EE 6 应用程序(Weblogic 12c、EJB 3.1、JSF 2)中,我需要知道在 EJB 中谁调用了该方法。

但是从 context.getCallerPrincipal().getName() 获得的调用者登录是不够的,因为登录在我的应用程序中不是唯一的。我需要从 JSF 层(用户组织 ID)传递附加参数,但我不想更改每个方法的签名。

在用户登录应用程序(或通常在 JSF 层)时,是否有任何方法可以设置自定义参数,稍后对 EJB 可见?

4

1 回答 1

2

有几个选项。

  1. 使用 JASPIC 将用户/调用者主体名称设置为不同于用于登录的用户的名称。

例如,如果用户使用“joe”登录,那么对于大多数内置模块,“joe”将是从 context.getCallerPrincipal().getName() 返回的内容。

使用 JASPIC,您可以将其设为任何字符串,例如“joe.theboss::131::9634”。

  1. 使用 CDI 来记住请求范围内的某些内容。EJB bean 可以使用请求范围的 CDI bean 注入(注意使用 CDI @RequestScoped 而不是 JSF 版本)。
于 2013-03-22T15:30:00.010 回答