Как получить количество подключенных пользователей и их роли с помощью j_security_check?

Я получаю имя пользователя подключенного пользователя (используя j_security_check) таким образом, через управляемый компонент:

......
    username =   FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal().getName();

А затем отобразите его на странице jsf следующим образом: # {userBean.username} Но я не нашел способа получить количество подключенных пользователей и узнать их роль. Другими словами, я хочу отображать помимо имени пользователя роль пользователя и количество подключенных пользователей. Как я могу этого добиться !? Заранее благодарим за помощь!

РЕДАКТИРОВАТЬ: Теперь я могу получить роль подключенного пользователя, используя именованный запрос в управляемом компоненте:

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.


EDIT: Одно решение. это все еще не работает для меня, это добавить 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();
    }


}
9
задан Tiny 22 June 2014 в 13:59
поделиться