Java 如何让所有登录到web应用程序的用户列表
我使用Java 如何让所有登录到web应用程序的用户列表,java,spring,spring-mvc,Java,Spring,Spring Mvc,我使用springmvc,每次登录我的web应用程序的用户我都会创建一个会话变量user,它是一个包含他的id、姓名和其他一些信息的对象 session.setAttribute("user", user); 我想要的是有一个登录到我的程序中的所有用户的列表 我想让这个列表检查同时登录,因为它只能是一个帐户访问 ps:不要告诉我使用spring security,因为我只想使用MVC拦截器和preHandle() @Autowired ServletContext context; 2)
springmvc
,每次登录我的web应用程序的用户我都会创建一个会话变量user
,它是一个包含他的id、姓名和其他一些信息的对象
session.setAttribute("user", user);
我想要的是有一个登录到我的程序中的所有用户的列表
我想让这个列表检查同时登录,因为它只能是一个帐户访问
ps:不要告诉我使用spring security
,因为我只想使用MVC拦截器
和preHandle()
@Autowired
ServletContext context;
2) 您需要收集上下文中设置的所有登录用户
...
public void login(User user) {
logins.add(user);
}
...
public void logout(User user) {
logins.remove(user);
}
如果您已经在会话中存储登录的用户
public void sessionDestroyed(HttpSessionEvent event) {
User user = (User) event.getSession().getAttribute("user");
if (user != null) {
Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins");
logins.remove(user);
}
}
public void sessionDestroyed(HttpSessionEvent事件){
User User=(User)event.getSession().getAttribute(“用户”);
如果(用户!=null){
Set logins=(Set)event.getSession().getServletContext().getAttribute(“登录”);
删除(用户);
}
}
1)使用以下代码在SpringMVC中自动连接ServletContext对象
@Autowired
ServletContext context;
2) 您需要收集上下文中设置的所有登录用户
...
public void login(User user) {
logins.add(user);
}
...
public void logout(User user) {
logins.remove(user);
}
如果您已经在会话中存储登录的用户
public void sessionDestroyed(HttpSessionEvent event) {
User user = (User) event.getSession().getAttribute("user");
if (user != null) {
Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins");
logins.remove(user);
}
}
public void sessionDestroyed(HttpSessionEvent事件){
User User=(User)event.getSession().getAttribute(“用户”);
如果(用户!=null){
Set logins=(Set)event.getSession().getServletContext().getAttribute(“登录”);
删除(用户);
}
}
您可以使用HttpSessionListener和ServletContextListener的实现。
HttpSessionListener在创建或销毁会话时被调用,而as ServletContextListener在创建或销毁上下文时被调用
编辑:
HttpSessionBindingListener可用于实例可能存储在会话中的类,例如在您的用户案例中
当HttpSession.setAttribute()将此用户的实例设置为会话属性时,将调用valueBound()。当它被HttpSession.removeAttribute()或会话的invalidate删除,或被另一个HttpSession.setAttribute()替换时,将调用valueUnbound()
例如:
public class User implements HttpSessionBindingListener {
@Override
public void valueBound(HttpSessionBindingEvent event) {
addLoginUser(event);
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
removeLoginUser(event);
}
private void removeLoginUser(HttpSessionBindingEvent event){
if (user != null) {
ServletContext context = event.getSession().getServletContext();
Set<User> logins = context.getAttribute("loginUsers");
logins.remove(this);
}
}
private void addLoginUser(HttpSessionBindingEvent event){
if (user != null) {
ServletContext context = event.getSession().getServletContext();
Set<User> logins = context.getAttribute("loginUsers");
logins.add(this);
}
}
公共类用户实现HttpSessionBindingListener{
@凌驾
public void valueBound(HttpSessionBindingEvent事件){
addLoginUser(事件);
}
@凌驾
public void valueUnbound(HttpSessionBindingEvent事件){
移除用户(事件);
}
私有void removeLoginUser(HttpSessionBindingEvent事件){
如果(用户!=null){
ServletContext=event.getSession().getServletContext();
设置logins=context.getAttribute(“loginUsers”);
删除(这个);
}
}
私有void addLoginUser(HttpSessionBindingEvent事件){
如果(用户!=null){
ServletContext=event.getSession().getServletContext();
设置logins=context.getAttribute(“loginUsers”);
添加(这个);
}
}
}
//初始化ServletContext时,使用此listner添加登录器。
公共类MyServletContextListener实现ServletContextListener{
公共void contextInitialized(ServletContextEvent事件){
Set logins=new HashSet();
//将初始登录添加到ServletContext
event.getServletContext().setAttribute(“loginUsers”,logins);
}
public void contextdestromed(ServletContextEvent事件){}
}
在web.xml文件中添加以下配置
<listener>
<listener-class>
package.name.MySessionAttributeListener
</listener-class>
</listener>
<listener>
<listener-class>
package.name.MyServletContextListener
</listener-class>
</listener>
package.name.MySessionAttributeListener
package.name.MyServletContextListener
希望这有帮助,谢谢。您可以使用HttpSessionListener和ServletContextListener的实现。
HttpSessionListener在创建或销毁会话时被调用,而as ServletContextListener在创建或销毁上下文时被调用
编辑:
HttpSessionBindingListener可用于实例可能存储在会话中的类,例如在您的用户案例中
当HttpSession.setAttribute()将此用户的实例设置为会话属性时,将调用valueBound()。当它被HttpSession.removeAttribute()或会话的invalidate删除,或被另一个HttpSession.setAttribute()替换时,将调用valueUnbound()
例如:
public class User implements HttpSessionBindingListener {
@Override
public void valueBound(HttpSessionBindingEvent event) {
addLoginUser(event);
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
removeLoginUser(event);
}
private void removeLoginUser(HttpSessionBindingEvent event){
if (user != null) {
ServletContext context = event.getSession().getServletContext();
Set<User> logins = context.getAttribute("loginUsers");
logins.remove(this);
}
}
private void addLoginUser(HttpSessionBindingEvent event){
if (user != null) {
ServletContext context = event.getSession().getServletContext();
Set<User> logins = context.getAttribute("loginUsers");
logins.add(this);
}
}
公共类用户实现HttpSessionBindingListener{
@凌驾
public void valueBound(HttpSessionBindingEvent事件){
addLoginUser(事件);
}
@凌驾
public void valueUnbound(HttpSessionBindingEvent事件){
移除用户(事件);
}
私有void removeLoginUser(HttpSessionBindingEvent事件){
如果(用户!=null){
ServletContext=event.getSession().getServletContext();
设置logins=context.getAttribute(“loginUsers”);
删除(这个);
}
}
私有void addLoginUser(HttpSessionBindingEvent事件){
如果(用户!=null){
ServletContext=event.getSession().getServletContext();
设置logins=context.getAttribute(“loginUsers”);
添加(这个);
}
}
}
//初始化ServletContext时,使用此listner添加登录器。
公共类MyServletContextListener实现ServletContextListener{
公共void contextInitialized(ServletContextEvent事件){
Set logins=new HashSet();
//将初始登录添加到ServletContext
event.getServletContext().setAttribute(“loginUsers”,logins);
}
public void contextdestromed(ServletContextEvent事件){}
}
在web.xml文件中添加以下配置
<listener>
<listener-class>
package.name.MySessionAttributeListener
</listener-class>
</listener>
<listener>
<listener-class>
package.name.MyServletContextListener
</listener-class>
</listener>
package.name.MySessionAttributeListener
package.name.MyServletContextListener
希望这有帮助,谢谢。忘记了l的创建