网站管理踢出在线用户

1,通过session监听器进行用户监听

package listener;
/*
 * 监听session的创建,同时创建一个user保存用户信息,
 * 将user对象存在 list《user》集合中,并将集合保存到request域中
 * 传递到management.jsp中,通过foreach进行遍历.
 * * */
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import listener.User;

public class UserListener implements HttpSessionListener {

   //   创建list对象保存用户.
    List<User> users=new ArrayList<>();
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("有人访问!");
        HttpSession session = se.getSession();

       //创建user对象,保存用户信息
        User user=new User();
        session.getLastAccessedTime();
        user.setLogintime(new Date(session.getCreationTime()));
        user.setSessionid(session.getId());
        ServletContext context = session.getServletContext();
        String ip=(String) context.getAttribute("ip");
        String username=(String) context.getAttribute("username");
        user.setIp(ip);
        user.setName(username);

       //小技巧,将session保存到user中,销毁时用到.
        user.setSession(session);
        users.add(user);

        //将list集合保存到context域中
        context.setAttribute("users", users);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("访问结束");
    }
    
}

2,jsp代码,对几个进行遍历

<table style="margin: 0 auto;" cellspacing="0">
                <caption class="caption1">当前在线人数:${fn:length(users) }</caption>
                <thead class="thread1">
                    <tr>
                        <th width="100px">用户名</th>
                        <th width="240px">登录时间</th>
                        <th width="240px">sessionID</th>
                        <th width="200px">IP地址</th>
                        <th width="100px">操作</th>
                    </tr>
                </thead>
                <c:forEach items="${users }" var="user">
                    <tbody class="tbody1">
                        <tr>
                            <td>${user.name }</td>
                            <td>${user.logintime }</td>
                            <td>${user.sessionid }</td>
                            <td>${user.ip}</td>

                                <!-- 点击踢出,链接到servlet中同时传递参数用户sessionid,servlet通过sessionid查找session销毁 -->
                            <td><a href="/yqcms/ForceDownservlet?sessionid=${user.sessionid }">踢出</a></td>
                        </tr>
                    </tbody>
                </c:forEach>
            </table>

3,servlet方面代码

package listener;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ForceDownservlet
 */
@WebServlet("/ForceDownservlet")
public class ForceDownservlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public ForceDownservlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     *通过management.jsp页面传过来的值 sessionid 与context中的users中用户sessionid进行对比此得到users,得到此user的session然后利用
     *invalidate()方法对session进行销毁,与此同时对user中的用户对象进行移除.修改context中的users值,重定向到用户管理页面.
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        String usessionid=request.getParameter("sessionid");
        List<User> users=(List<User>) request.getServletContext().getAttribute("users");
        for(int i = 0 ; i <users.size() ; i++) {
             String sessionid= users.get(i).getSessionid();
              if(sessionid.equals(usessionid))
              {
                  /**对由于session时间过期自动销毁的session再次点击踢出时异常进行处理,

                     此处未处理,可以按照自己想法处理一下*/
                  try {
                    users.get(i).getSession().invalidate();
                    users.remove(i);
                } catch (Exception e) {
                    System.out.println("session yijing xioashui");
                }
              }
            }
        
        request.getServletContext().setAttribute("users", users);
        request.getRequestDispatcher("manageUser.jsp").forward(request, response);
        
    }

}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值