zoukankan      html  css  js  c++  java
  • 用户自动登录实现(Cookie)

    自动登录勾选框jsp

    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
            <div class="checkbox">
                <label> <input type="checkbox"> 自动登录
                </label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <label> <input
                    type="checkbox"> 记住用户名
                </label>
            </div>
        </div>
    </div>

    访问的servlet用于封装cookie

    //用户登录
    public void login(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        HttpSession session = request.getSession();
    
        //获得输入的用户名和密码
        String username = request.getParameter("username");
        String password = request.getParameter("password");
    
        //将用户名和密码传递给service层
        UserService service = new UserService();
        User user = null;
        try {
            user = service.login(username,password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    
        //判断用户是否登录成功 user是否是null
        if(user!=null){
            //登录成功
            //***************判断用户是否勾选了自动登录*****************
            String autoLogin = request.getParameter("autoLogin");
            if("autoLogin".equals(autoLogin)){
                //要自动登录
                //创建存储用户名的cookie
                Cookie cookie_username = new Cookie("cookie_username",user.getUsername());
                cookie_username.setMaxAge(10*60);
                //创建存储密码的cookie
                Cookie cookie_password = new Cookie("cookie_password",user.getPassword());
                cookie_password.setMaxAge(10*60);
    
                response.addCookie(cookie_username);
                response.addCookie(cookie_password);
    
            }
    
            //***************************************************
            //将user对象存到session中
            session.setAttribute("user", user);
    
            //重定向到首页
            response.sendRedirect(request.getContextPath()+"/index.jsp");
        }else{
            request.setAttribute("loginError", "用户名或密码错误");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }
    }

    自动登录的filter

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        
        //强转成HttpServletRequest
        HttpServletRequest req = (HttpServletRequest) request;
        
        User user = (User) req.getSession().getAttribute("user");
        
        if(user==null){
            String cookie_username = null;
            String cookie_password = null;
            
            //获取携带用户名和密码cookie
            Cookie[] cookies = req.getCookies();
            if(cookies!=null){
                for(Cookie cookie:cookies){
                    //获得想要的cookie
                    if("cookie_username".equals(cookie.getName())){
                        cookie_username = cookie.getValue();
                    }
                    if("cookie_password".equals(cookie.getName())){
                        cookie_password = cookie.getValue();
                    }
                }
            }
            
            if(cookie_username!=null&&cookie_password!=null){
                //去数据库校验该用户名和密码是否正确
                UserService service = new UserService();
                try {
                    user = service.login(cookie_username,cookie_password);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                
                //完成自动登录 
                req.getSession().setAttribute("user", user);
                
            }
        }
          
        //放行
        chain.doFilter(req, response);
        
    }
  • 相关阅读:
    Git之GitFlow工作流
    auth
    rbac
    修改或删除windows上的git用户凭证信息
    Linux之shell备份数据库
    解决Navicat 连接服务器数据库报10060问题
    PHP框架学习思路
    shell之hello world
    Linux命令大全
    PHP 各个版本的区别
  • 原文地址:https://www.cnblogs.com/ms-grf/p/7216748.html
Copyright © 2011-2022 走看看