管理対象Beanを介して、接続されたユーザーのユーザー名を(j_security_checkを使用して)次のように取得します。
......
username = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal().getName();
そして、この方法でjsfページに表示します:#{userBean.username}
しかし、接続されているユーザーの数を取得してその役割を取得する方法はわかりませんでした。つまり、ユーザー名、ユーザーロール、接続ユーザー数のほかに表示したいのです。
どうすればこれを達成できますか!?よろしくお願いします!
編集:マネージドBeanでnamedqueryを使用して、接続されたユーザーのロールを取得できるようになりました:
public Users getUserRole(){
try {
Users auser = (Users)
em.createNamedQuery("Users.findByUsername").
setParameter("username", getRemoteUser()).getSingleResult();
return auser;
} catch (NoResultException nre) {
JsfUtil.addErrorMessage(nre, "getUserRole Error");
return null;
}
}
およびxhtmlページ:
<h:outputLabel for="rolefacet" value="Role: "/>
<h:outputFormat id="rolefacet" value="#{UserBean.userRole.ugroup}" />
一方、ugroupは、Usersエンティティクラスのロール名です。
編集:まだ私のために機能しない1つの解決策は、HttpSessionListenerを私のweb.xmlに追加することです:
package beans;
/**
*
* @author med81
*/
import java.io.Serializable;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.ArrayList;
import javax.faces.context.FacesContext;
public class SessionCounter implements Serializable, HttpSessionListener {
private List sessions = new ArrayList();
Object s = FacesContext.getCurrentInstance().getExternalContext().getSession(false);
public Object getS() {
return s;
}
public void setS(Object s) {
this.s = s;
}
public SessionCounter() {
}
public void sessionCreated(HttpSessionEvent event) {
HttpSession session = event.getSession();
sessions.add(session.getId());
session.setAttribute("counter", this);
}
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession session = event.getSession();
sessions.remove(session.getId());
session.setAttribute("counter", this);
}
/**
*
* @return size of the session list
*/
public int getActiveSessionNumber() {
return sessions.size();
}
}