• 11 Servlet——cookie三天免登陆


    先看看项目流程

    从主页开始的首次成功登陆的运行流程:index.jsp->CookieServlet(检查是否有cookie记录,如果没有记录跳转登录页面)->PageServlet(登录页面)->LoginServlet(从上个页面获取账号密码,调用service做校验,如果账号密码均正确,设置cookie并跳转主页)->MainServlet(主页)

    从主页开始的3天内免登陆流程:index.jsp->CookieServlet(检查是否有cookie记录(uid),如有则调用service校验该用户是否存在,如果存在,跳转主页面)->MainServlet(主页面)

    Cookie信息校验

      编写CookieServlet

    •   判断请求中是否携带正确的Cookie信息
    •   如果有则校验Cookie信息是否正确
    •     如果校验正确则直接响应主页面(MainServlet)给用户
    •     如果校验不正确则响应登录页面(PageServlet)给用户
    •   如果没有则请求转发给登录页面

    注意:cookie中存的是用户的uid而不是账号密码,这样比较安全

    CookieServlet:

    package com.xiaohei.servlet;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.xiaohei.pojo.User;
    import com.xiaohei.service.CookieService;
    import com.xiaohei.service.LoginService;
    import com.xiaohei.service.impl.CookieServiceImpl;
    import com.xiaohei.service.impl.LoginServiceImpl;
    
    /**
     * Servlet implementation class CookieServlet
     */
    public class CookieServlet extends HttpServlet {
    	@Override
    	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		//设置请求编码
    		req.setCharacterEncoding("utf-8");
    		//设置响应类型及编码
    		resp.setContentType("text/html;charset=utf-8");
    		//获取请求
    			//判断是否有cookie
    			Cookie[] cks = req.getCookies();
    			//处理请求
    			if(null!=cks) {
    				//从cookie中获取uid
    				String uid = "";
    				for(Cookie c : cks) {
    					if("uid".equals(c.getName())) {
    						uid = c.getValue();
    					}
    				}
    				//校验用户是否存在(使用uid)
    				CookieService ls = new CookieServiceImpl();
    				User u = ls.checkUidService(uid);
    				if(null!=u) {//存在,跳转主页
    					resp.sendRedirect("main");
    					return;
    				}else {//不存在,跳转登录页面
    					req.getRequestDispatcher("/page").forward(req, resp);
    					return;
    				}
    			}else {//没有cookie,跳转登录页面
    				req.getRequestDispatcher("/page").forward(req, resp);
    				return;
    			}
    			
    					
    	}
    }
    

      

    CookieServiceImpl

    public class CookieServiceImpl implements CookieService{
    
    	//校验用户是否存在
    		@Override
    		public User checkUidService(String uid) {
    			CookieDao dao = new CookieDaoImpl();
    			User user = dao.checkUid(uid);
    			return user;
    		}
    
    }
    

      

    CookieDaoImpl

    public class CookieDaoImpl implements CookieDao{
    	@Override
    	public User checkUid(String uid) {
    		User user = null;
    		try(Connection conn = JDBCUtil.getConnection();) {
    			String sql = "select * from t_user where uid = ? ";
    			PreparedStatement ps = conn.prepareStatement(sql);
    			ps.setString(1, uid);
    			ResultSet set = ps.executeQuery();
    			while(set.next()) {
    				user = new User();
    				int id = set.getInt("uid");
    				String username = set.getString("uname");
    				String password = set.getString("pwd");
    				user.setUid(id);
    				user.setUsername(username);
    				user.setPassword(password);
    				return user;
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    
    }
    

      

    LoginServlet 添加Cookie

    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    			//设置请求编码
    			req.setCharacterEncoding("utf-8");
    			//设置响应编码
    			resp.setContentType("text/html;charset=utf-8");
    			//获取请求数据
    				username = req.getParameter("uname");
    				password = req.getParameter("pwd");
    			//处理请求
    				LoginService ls = new LoginServiceImpl();
    				User user = ls.checkLoginService(username, password);
    			//响应
    			if(null != user) {
    				//创建cookie,实现3天免登陆
    					//我们不直接存账号密码,而是存用户的uid
    					Cookie c = new Cookie("uid",user.getUid()+"");
    					//设置有效期为3天
    					c.setMaxAge(3*24*3600);
    					//设置指定url
    					c.setPath("/200222-CookieLogin/ck");
    					//添加
    					resp.addCookie(c);
    				String username = user.getUsername();
    				String pwd = user.getPassword();
    				resp.sendRedirect("main");
    				return;
    			}else {
    				//请求转发
    				req.setAttribute("msg", "账号或密码错误");
    				req.getRequestDispatcher("page").forward(req, resp);
    				return;
    			}
    		}
    

      

      

  • 相关阅读:
    Springmvc数据验证
    Springmvc文件上传
    BaseController
    说说NSProxy
    Objective-C的动态设计
    UITableView卡片式分组
    RunLoop应用之性能优化
    OC与JS交互之JavaScriptCore
    Core Data 迁移
    一个广告轮播视图的实现
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/12349004.html
Copyright © 2020-2023  润新知