通过过滤器Filter和Servlet实现自动登录

1. Servlet登录部分:

		    假设是第一次登录,此时session和cookie中没有用户登录的数据,所以需要在输入登录信息之后将用户信息存入session,
		以及将用户的账号密码拼接成字符串在勾选自动登录的状态下存入cookie中,代码如下:
							//调用业务层方法登录成功就把user对象信息存储到session中
			                User user = service.login(username, password);
			                request.getSession().setAttribute("user", user);
			
			                //登录成功将用户的账号密码拼接成字符串存入到cookie中
			                String userStr = username+":"+password;
			                //如果用户在客户端勾选了自动登录则客户端传入的请求参数auto的值为on
			                if ("on".equals(auto)) {
			                    //将账号密码存储到cookie中
			                    Cookie cookie = new Cookie(user",userStr);
			                    cookie.setPath(request.getContextPath());
			                    cookie.setMaxAge(7*24*60*60);
			                    response.addCookie(cookie);
			                }

2. Filter部分

	  	  过滤器的作用是在执行servlet中的方法之前先判断用户是否已经登录,判断的方法就是获取session中的user对象,判断user
	  对象是否为null,不为null就直接放行;为null就去cookie中查找是否有用户存入的登录信息,如果有就获取信息并存入session中,如
	  果没有就证明用户没有勾选自动登录或者已经退出登录,代码如下:
							HttpServletRequest request = (HttpServletRequest) req;
					        HttpServletResponse response = (HttpServletResponse) resp;
					        //获取session中user对象
					        HttpSession session = request.getSession();
					        User user = (User) session.getAttribute("user"); 
					        //先判断user是否为空,不为空就直接执行放行
					        if (user == null) {
					            //user为空证明未登录,则需要去cookie中获取存入的账号密码
					            Cookie[] cookies = request.getCookies();
					            //遍历cookies获取账号密码
					            if (cookies!=null) {
					                for (Cookie cookie : cookies) {
					                    if ("user".equals(cookie.getName())) {
					                    	//获取cookie中user的值然后将账号密码分离出来
					                        String[] str = cookie.getValue().split(":");
					                        try {
					                        	//调用业务层的自动登录方法登录
					                            user = service.autoLogin(str[0], str[1]);
					                        } catch (Exception e) {
					                            e.printStackTrace();
					                        }
					                        //登录完成将user对象存入session中
					                        session.setAttribute("user",user);
					                    }
					                }
					            }
					        }
					        chain.doFilter(req, resp);

3.servlet退出登录部分

		退出登录时需要将session和cookie进行销毁,这部分就很简单,代码如下:
							//通过调用invalidate方法销毁session对象
							HttpSession session = request.getSession();
					        session.invalidate();
					        //通过将cookie的生命周期设置为0销毁cookie
					        Cookie cookie = new Cookie("user","s");
					        cookie.setMaxAge(0);
					        cookie.setPath(request.getContextPath());
					        response.addCookie(cookie);
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值