Javaweb 自动登录 详细讲解

***

> 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();
        }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值