我想使用 EJBContext.getCallerPrincipal() 检索用户名
public class GlobalInterceptor {
@EJB
private AuditLogsEJB auditLogsEJB;
@Resource
private EJBContext context;
@AroundInvoke
public Object auditLog(InvocationContext invocationContext) throws Exception
{
System.out.println(context.getCallerPrincipal()); //it outputs "ANONYMOUS"
}
}
但是我没有任何安全领域,我没有定义任何 <security-role> 或 <group-name> 因为用户名/密码被发送到远程应用程序进行验证。但为了方便起见,我仍然想使用 Principal 类来获取用户名和角色。
有没有办法在 JSF 托管 bean 或任何 EJB 中以编程方式设置 Principal(用户名和角色),以便拦截器可以检索它?例如:
String role = authenticationWSPort.validate(username, password);
if(role != null)
{
Principal p = new Principal(username);
p.getRoles.add(role);
FacesContext.getCurrentInstance().blah-blah.blah-blah.addPrincipal(p);
//I am looking for something similar to the 3 lines above
}
else
// invalid username and password