实现思路
1.首先判断是否勾选了自动登录按钮(LoginServlet文件中进行判断)
2.在LoginServlet 创建一个cookie 将用户的登录账号与密码保存到其中 ,存到客户端
3.返回到前端页面
4.在访问目标资源前 写一个filter (AutoLoginFilter) 在filter文件中获取到cookie中的值,根据值连接数据库(再次登录) 并将user对象存到session中
具体实现
1.前端页面中存在一个checkbox 如需自动登录 将其勾选上
<input type="checkbox" name="autologin" value="autologin"/>
2.在LoginServlet中 对其进行判断(前期是第一次登录成功 其返回不为空)
//第一次登录成功 则后续才进行判断 user为调用登录返回的数据if(user!=null){//判读是否勾选自动登录String autologin= request.getParameter("autologin");if(autologin!=null){//勾选了则创建一个cookie 将账号密码保存到其中Cookie userid=new Cookie("userid",user.getUserid());Cookie password=new Cookie("password",user.getPassword());//给cookie设置持续化时间password.setMaxAge(60*60);userid.setMaxAge(60*60);//设置路径userid.setPath(reuqest.getContextPath());password.setPath(reuqest.getContextPath())//将cookie发送到客户端response.addCookie(userid);response.addCookie(password);}}
后续需要创建一个filter过滤器 让其可以自动登录(勾选Lee自动登录按钮)
新建一个class AutoLoginFilter 实现Filter接口 重写方法 (只需处理doFliter方法)
dofilter 方法中的代码
//获取cookie中的用户id与登录密码Cookie []cookies=request.getCookies();String cookie_userid=NULL;String cookie_password=NULL;//创建一个新的session对象HttpSession session=request.getSession();//判断其是否为空 当没勾选自动时,cookie为空if(cookies!=null){//通过for循环拿到其中的数据for(Cookie cookie:cookies){//获取之前存入到cookie中的值if(cookie.getName().equals("userid")){cookie_userid=cookie.getValue();}if(cookie.getName().equals("password")){cookie_password=cookie.getValue();}}}//判断cookie中是否为nullif(cookie_userid!=null&& cookie_password!=null){//调用登录方法 参数有一点修改UserService us=new UserService();User user=null;user= us.login(cookie_userid, cookie_password);//再将user对象放置到session中session.setAttribute("user",user);//最最最最重要的一点将其放行chain(request,response);}
在web.xml文件中配置fliter参数
<filter><filter-name>AutoLoginFilter</filter-name><filter-class>com.hnoracle.tfwp.filiter.AutoLoginFilter</filter-class></filter><filter-mapping><filter-name>AutoLoginFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>