如何使用过滤器实现自动登录功能 Java

  • 实现思路
  1. 先判断session是否有效, 如果有效,就不用取cookie了,直接放行。

  2. 如果session失效了,那么就取 cookie。

    1. 没有cookie 放行

    2. 有cookie

      1. 取出来cookie的值,然后完成登录
      2. 把这个用户的值存储到session中
      3. 放行。
			/**
			 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
			 */
			public void doFilter(ServletRequest req, ServletResponse response, FilterChain chain) throws IOException, ServletException {
	
			try {
				HttpServletRequest request = (HttpServletRequest) req;
				//比如我们使用userBean封装用户信息并将信息使用userBean的形式 存入session
				//先判断,现在session中还有没有那个userBean
				UserBean userBean = (UserBean) request.getSession().getAttribute("userBean");
				if(userBean != null){
					chain.doFilter(request, response);
				}else{
					//代表session失效了。
					
					//2. 看cookie。
					
					//1. 来请求的时候,先从请求里面取出cookie , 但是cookie有很多的key-value
					Cookie[] cookies = request.getCookies();
					//2. 从一堆的cookie里面找出我们以前给浏览器发的那个cookie
					Cookie cookie = CookieUtil.findCookie(cookies, "auto_login");
					
					//第一次来
					if(cookie  == null){
						chain.doFilter(request, response);
					}else{
						
						//不是第一次。
						
						String value = cookie.getValue();
						String username = value.split("#拿上次存入cookie数据#")[0];
						String password = value.split("#拿上次存入cookie数据#")[1];
	
						//完成登录
						UserBean user = new UserBean();
						user.setUsername(username);
						user.setPassword(password);
	
						UserDao dao = new UserDaoImpl();
						userBean = dao.login(user);
						
						//使用session存这个值到域中,方便下一次未过期前还可以用。
						request.getSession().setAttribute("userBean", userBean);
						
						chain.doFilter(request, response);
					}
					
				}
				
				} catch (Exception e) {
					e.printStackTrace();
					chain.doFilter(req, response);
				}
				}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值