功能介绍: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);
}
}
缺点:
另一个页面需要手动刷新才可发现掉线。