在我的 Java EE 6 应用程序(Weblogic 12c、EJB 3.1、JSF 2)中,我需要知道 EJB 中谁调用了该方法。
但是从 context.getCallerPrincipal().getName() 获取的调用者登录名还不够,因为登录名在我的应用程序中不是唯一的。我需要从 JSF 层传递附加参数(用户组织 id),但我不想更改每个方法的签名。
有没有办法在用户登录应用程序时(或者通常在 JSF 层)设置自定义参数,这些参数稍后对 EJB 可见?
最佳答案
有几个选项。
- 使用 JASPIC 将用户/调用者主体名称设置为用于登录的用户以外的其他名称。
例如,如果用户使用“joe”登录,则对于大多数内置模块,“joe”将是从 context.getCallerPrincipal().getName() 返回的内容。
使用 JASPIC,您可以将其设置为任何字符串,例如“joe.theboss::131::9634”。
- 使用 CDI 来记住请求范围内的某些内容。 EJB bean 可以使用请求范围的 CDI bean 进行注入(inject)(请小心使用 CDI @RequestScoped 而不是 JSF 版本)。
关于java - 将附加参数从 JSF 传递到 EJB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15569046/