自动登录
概念:
首先保证服务器处于一直开启状态,比如微博,因为只有服务器一值开启用户才能自动登录,服务器一旦崩溃,所有用户无法登录,何况自动登录。
自动登录是登录过一次后,在关闭整个浏览器的情况下(服务器一直开启),再次打开浏览器不需要登录即可访问登录过的网站。
一,使用cookie
实现方法
使用cookie保存首次登录成功后的用户名密码,并设置有效时间,提交保存。
Cookie cookie1 = new Cookie("username", "kaiqiang");
Cookie cookie2 = new Cookie("password", "123456");
//在哪个项目目录下有效
cookie1.setPath("/Day1014");
cookie2.setPath("/Day1014");
//设置有效时长,秒为单位
cookie1.setMaxAge(60 * 60);
cookie2.setMaxAge(60 * 60);
//保存提交
resp.addCookie(cookie1);
resp.addCookie(cookie2);
在项目的过滤器中通过过滤页面实现自动登录
//session得到首次登录登录的用户信息
//session得到使用cookie自动登录后的用户信息
//只要有一个用户信息不为空,说明已登录了,直接放行,退出
//如果两个用户信息都是空,判断Cookie是否为空,是说明从未登陆过需要跳转到登录页面,cookie不是空说明曾经登录成功过,要去自动登录。自动登录成功后要保存用户信息,以便于过滤验证
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
HttpSession session = request.getSession();
//得到首次登录登录的用户信息
EmpManager empManager = (EmpManager)session.getAttribute("empManager");
//得到使用cookie自动登录后的用户信息
EmpManager empManager1 = (EmpManager)session.getAttribute("empManager1");
//只要有一个用户信息不为空,说明已登录了,直接放行,退出
if(empManager != null || empManager1 != null){
chain.doFilter(req, resp);
return;
}
Cookie[] cookies = request.getCookies();
System.out.println("cookie是否为空:" + cookies);
String username = "";
String password = "";
//如果两个用户信息都是空,判断Cookie是否为空,是说明从未登陆过需要跳转到登录页面,cookie不是空说明曾经登录成功过,要去自动登录。
if (cookies != null) {
for (Cookie c : cookies) {
System.out.println(c.getValue());
if ("username".equals(c.getName())) {
username = URLDecoder.decode(c.getValue(), "utf-8");
}
if ("password".equals(c.getName())) {
password = URLDecoder.decode(c.getValue(), "utf-8");
}
}
System.out.println(username);
EmpManager empManager2 = service.login(username, password);
if (empManager2 != null) {
// 保存自动登录的用户信息
request.getSession().setAttribute("empManager1", empManager2);
request.getRequestDispatcher("/manager/empList").forward(req,resp);
//response.sendRedirect(request.getContextPath() + "/manager/empList");
}
}else{
response.sendRedirect("/Day1014/login.html");
}