如何使用j_security_check获取已连接用户的数量及其角色?
|
我通过托管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实体类中的角色名称。
编辑:仍然不适合我的一种解决方案是将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();
}
}
没有找到相关结果
已邀请:
2 个回复
搁手
API使用编程登录。 登录表格:
用户管理器bean:
注销(和会话无效)侦听器:
(请勿在
方法中执行此操作!这是会话无效触发的,当调用
或会话过期时,会话无效将发生) 在任何登录视图中,您可以按以下方式获取当前用户和登录计数:
部窖空
如果您使用的是Java EE 6,将很容易通过托管bean方法替换
,该方法利用新的Servlet 3.0
,同时将
添加到注入的
bean的
中。 但是在Java EE 5上,没有简单的方法可以挂在它上面。您将需要检查登录用户的每个请求。最好的实现方法是在有
的情况下将
对象放入会话中。您可以使用过滤器执行此操作,该过滤器在
方法中大致完成以下工作。
最后,要从登录名中删除用户,最好是钩上“ѭ28”,假设您在注销时使会话无效。会话期满时也会调用此方法。