Javaweb 自动登录 详细讲解

来源:互联网 发布:自动化编程是什么 编辑:程序博客网 时间:2024/06/05 16:23
***> Filter过滤端*** public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {        //强转成HttpServlet        HttpServletRequest request= (HttpServletRequest) req;        HttpServletResponse response= (HttpServletResponse) resp;        //获取客户端的cookie        Cookie[] cookies=request.getCookies();       //根据提交的JSESSIONID来检索session是否已创建(每次会话服务器返给浏览器的JSESSIONID不同)        User user= (User) request.getSession().getAttribute("user");        //如果不为空说明是在同一会话中进行操作        if(user!=null){            System.out.println("不为空");        }else{          //为空说明重新开启会话,根据客户端的cookie 来获取需要自动登录的用户名和密码            System.out.println("为空,重新加载");            if(cookies!=null){                String username=cookies[1].getValue();                System.out.println(username);                String password=cookies[2].getValue();                System.out.println(password);              //对用户名和密码进行数据库连接查询                ComboPooledDataSource cpd=new ComboPooledDataSource();                QueryRunner qr=new QueryRunner(cpd);                String sql="select * from manager where M_name=? and M_password=?";                try {                    user=qr.query(sql,new BeanHandler<User>(User.class),username,password);                  //将查询到的数据封装成Javabean 然后设置session属性                    request.getSession().setAttribute("user",user);                } catch (SQLException e) {                    e.printStackTrace();                }            }        }        chain.doFilter(request, response);    }
***> Servlet数据处理端***  //servlet获取form提交的数据   String name=request.getParameter("username");   String password=request.getParameter("password");   String autoLogin=request.getParameter("autoLogin");    //根据用户名和密码进行连接数据库查证,如有此用户返回所有数据,并被封装成Javabean    ComboPooledDataSource cpd=new ComboPooledDataSource();    QueryRunner qr=new QueryRunner(cpd);    String sql="select * from manager where M_name=? and M_password=?";    try {            User user=qr.query(sql,new BeanHandler<User>(User.class),name,password);            if(user!=null){              //如果用户选择了自动登录则将用户的信息返回到浏览器,以便下次会话使用验证(未进行密码加密)                if(autoLogin.equals("ok")){                    Cookie cookieName=new Cookie("username",name);                    Cookie cookPassword=new Cookie("password",password);                    cookieName.setMaxAge(24*60*60);                    cookPassword.setMaxAge(24*60*60);                    cookieName.setPath(request.getContextPath()+"/");                    cookPassword.setPath(request.getContextPath()+"/");                    response.addCookie(cookieName);                    response.addCookie(cookPassword);                }              //将个人数据设置到session中                request.getSession().setAttribute("user",user);                response.sendRedirect("/testWeb/success.jsp");            }else{                System.out.println("空");            }        } catch (SQLException e) {            e.printStackTrace();        }