Session实现登录挤退功能

功能介绍:admin账号,在A电脑登录成功,然后admin账号在B电脑登录,A电脑的admin掉线

话不多说直接上码:

LoginServlet

@WebServlet("/login.do")
public class LoginServlet extends HttpServlet {
    
    
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //设置请求对象的编码集
        request.setCharacterEncoding("UTF-8");
        ServletContext servletContext = getServletContext();
        HttpSession session = request.getSession();
        
        //1.获得客户端提交的数据
        String user_name = request.getParameter("user_name");
        String user_password = request.getParameter("user_password");

        //2.调用底层类的方法处理登录功能
        UserDao userDao = new UserDaoImpl();
        User user = userDao.login(user_name,user_password);
		
        //3判断情况 进行处理
        if (user==null){
    
    
            //跳转到login.jsp
            response.sendRedirect("login.jsp");
        }else {
    
    
            // 登陆信息存放在 session 中
            session.setAttribute("user", user);
            //向servletContext存放session
            servletContext.setAttribute(user.getUser_name(), session);
            //跳转到index.jsp
            response.sendRedirect("/index.jsp");
        }
    }
}

LoginFilter

package com.jiazhong.shopping.filters;
import com.jiazhong.shopping.model.User;
import javax.servlet.FilterChain;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
//filter拦截  : 添加购物车 或 查看购物车   具体的程序根据自己的需要来拦截页面触发功能
@WebFilter({
    
    "/addCar.do","/showCar.do",}) /
public class LoginFilter extends HttpFilter {
    
    

    @Override
    public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
    
    
        
        //1.创建session,及servletContext
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user");
        ServletContext servletContext = getServletContext();

        //2.判断session中是否有用户登录的数据
        if(user == null){
    
    
            response.sendRedirect("/login.jsp");
            return;
        }
		
		//3.判断是否是一个session(通过sessionID)
        HttpSession  httpSession = (HttpSession) servletContext.getAttribute(user.getUser_name());
        if (null == httpSession || !session.getId().equals(httpSession.getId())){
    
    
            //不是同一个 代表异地登陆 需要重新登录
            response.sendRedirect("/login.jsp");
            
            //如果需要提示代码:
            /* 
            response.setContentType("text/html;charset=utf-8");//解决中文乱码问题
            response.getWriter().write("<script>alert('您的帐号在异地登陆!');location.href='login.jsp';</script>");
            */
            return;
        }
        //放行
        chain.doFilter(request,response);

    }
}

缺点:

另一个页面需要手动刷新才可发现掉线。

猜你喜欢

转载自blog.csdn.net/weixin_45894479/article/details/115335293
今日推荐