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> が定義されていません。これは、ユーザー名/パスワードがリモート アプリケーションに送信されて検証されるためです。しかし、便宜上、プリンシパル クラスを使用してユーザー名とロールを取得したいと考えています。
インターセプターが取得できるように、JSF マネージド Bean または任意の EJB でプリンシパル (ユーザー名とロール) をプログラムで設定する方法はありますか? 例えば:
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