JSP 页面
还是通过表单提交的方式。不过多出来一个checkbox的选项框
<label class="control-label col-sm-3">自动登录</label>
<div class="col-sm-3">
<input type="checkbox" name="autoLogin" value="autoLogin"/>
</div>
Servlet页面
if (autoLogin != null && autoLogin.equals("autoLogin")) {
String arr = doctor.getId() + "&" + doctor.getDoctorName() + "&" + doctor.getPassword();
System.out.println(arr);
Cookie cookie = new Cookie("doctor", arr);
cookie.setMaxAge(60 * 60 * 12);
response.addCookie(cookie);
}
在登录密码都不为空之内进行操作。如果等于空或者没有点击,就没有值传进来,就不需要存入cookie当中。但是本次的信息都需要放入session中。
HttpSession session = request.getSession();
session.setAttribute("doctor", doctor);
Filter进行控制
// 第一查询我的session中有没有值
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
HttpSession session = req.getSession();
//通过已知的属性去进行查找
Doctor doctor = (Doctor) session.getAttribute("doctor");
if (doctor != null) {
resp.sendRedirect("/Drug/mainPage.jsp");
return;
} else {
// 找出所有的cookie,然后根据名字返回cookie对象
Cookie[] cookies = req.getCookies();
Cookie cookieByName = CookieUtil.getCookieByName(cookies, "doctor");
if (cookieByName != null) {
String[] arr = cookieByName.getValue().split("&");
String id = arr[0];
String doctorName = arr[1];
String password = arr[2];
// 在从数据库里面查一下
/**
* 写一个数据库根据名字查找。如果成功就进行下一步,失败就重新登录
*/
DoctorServiceI doctorServiceI = new DoctorServiceImpI();
Doctor queryOne = new Doctor();
queryOne.setDoctorName(doctorName);
queryOne.setPassword(Integer.parseInt(password));
try {
queryOne = doctorServiceI.queryOneByDoctorNameAndPassword(doctor);
} catch (ServiceException e) {
e.printStackTrace();
}
Doctor sessionDoctor = new Doctor();
sessionDoctor.setId(Integer.parseInt(id));
sessionDoctor.setDoctorName(doctorName);
sessionDoctor.setPassword(Integer.parseInt(password));
//判断俩个是否相等
if (queryOne == sessionDoctor) {
session.setAttribute("doctor", sessionDoctor);
resp.sendRedirect("/Drug/mainPage.jsp");
return;
}else{
//否则回去登录页面
resp.sendRedirect("/Drug/doctorLogin.jsp");
return;
}
} else {
//如果cookie中没有
filterChain.doFilter(request, response);
return;
}
}
基本上就可以完成了。
记住过滤的是登录这个页面。