天天看点

用户账号自动登录--解决方案

案例1:
账号自动登录:
   1.思想
      使用Filter、cookie、session     步骤:
     首先建立基本的登录逻辑,就是连接上数据库可以进行简单的登录;
    项目架构:
     com.itheima.daoimp
        |--UserDaoimp
      com.itheima.domain
        |--User
      com.itheima.filter
        |--AutoLoginFilter
        |--Ucodeing  统一编码处理过滤器
      com.itheima.web.servlet
        |--UserLoginservlet
      com.itheima.utils
        |--JdbcUtils
        |--MyBeanUtils     核心jar:
      mysql-connector-java-5.1.22-bin.jar   //mysql连接jar
       mchange-commons-java-0.2.3.jar      //依赖包
       commons-logging-1.1.1.jar     //第三方log包,依赖包---log4j.jar
       commons-dbutils-1.4.jar       //jdbc封装工具类
       commons-beanutils-1.8.3.jar   //bean封装工具类
       c3p0-0.9.2-pre5.jar          //c3p0 数据库依赖包       c3p0-config.xml  //数据库连接池配置文件
      (一)简单的不进行阐述:直接上主要逻辑地方
         1.UserLoginservlet中进行登录判断,如果登录成功则,将从数据库查询出来的beanuser
         存储到session中
         2.判断V(视图层)是否点击了,记住密码复选框按钮。如果点击了
            将用户名和密码进行存储Cookie持久化处理
             cookie.setMaxAge(60*60*24); //一天
              cookie.setpath("/")
              respond.addCookie();      (二) |建立过滤器 AutoLoginFilter,进行登录的逻辑判断
               1.首先判断session中是否存在user对象
                1.1    User loginUser = (User) req.getSession().getAttribute("Loginuser");
                 1.2   如过存在(loginUser!=null) 则过滤器进行放行 chain.doFilter(); return;
                1.3   判断cookie中是否有值,(用户是否点击了记住密码)
            /**
         * 判断cookie中是否有值
         */
        String autoLogin = null;
        Cookie currentCookie = null;
        Cookie[] cookies = req.getCookies();
        if (cookies != null) {
         for (Cookie oldLogin : cookies) {
          if ("loginUser".equals(oldLogin.getName())) {
           // 得到目标cookie
           autoLogin = oldLogin.getValue();
           // 拿到了之前的cookie
           currentCookie = oldLogin;
           break;
          }
         }
        }    1.4 如果cookie中没有存在值 (autoLogin==null) chain.doFilter()----return;
     
     1.5  如果读取到了值则进行处理,设置登录逻辑               /**
         * 如果cookie中有值 进行处理
         */       String username = auto[0];
        String password = auto[1];       User user = new User(username, password);
           User  reuser = new Userservice().find(user);                 1.6判断逻辑,如果的用户登录过之后。cookie记住了之前的cookie信息,但是在登录之前user信息密码改了
                 。导致无法登录,之前的cookie信息,无效,但是还保存在内存中,持久化。
                   那么我们需要进行清理无效的cookie                    所以,进行清除。
                if (loginUser == null) {
                 //清楚无用的cookie
         currentCookie.setMaxAge(0);
         currentCookie.setPath("/");
         res.addCookie(currentCookie);
         
         chain.doFilter(request, response);        return;
        }          1.7
            // 登录
      req.getSession().setAttribute("Loginuser", reuser);
      chain.doFilter(request, response);      

继续阅读