COOKIE可以实现用户的自动登录功能。使用Cookies实现用户自动登录后,当客户端访问服务器的Servlet时,所有的Servlet都需要对用户的Cookie信息进行校验,为解决这一问题,可以在Filter陈旭中实现Cookie的校验。Filter对服务的请求进行拦截,一旦请求通过Filter时,就相当与用户信息校验通过。
(1)编写User.java程序
1 package filter; 2 3 public class User { 4 private String username; 5 private String password; 6 public String getUsername() { 7 return username; 8 } 9 public void setUsername(String username) { 10 this.username = username; 11 } 12 public String getPassword() { 13 return password; 14 } 15 public void setPassword(String password) { 16 this.password = password; 17 }
(2)编写login.jsp页面
1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8" import="java.util.*"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta charset="utf-8"> 7 <title>用户登录</title> 8 <center><h3>用户登录</h3></center> 9 </head> 10 <body style="text-align: center;"> 11 12 <form action="${pageContext.request.contextPath}/LoginServlet" 13 mothod="post"> 14 <table border="1" width="600px" cleepadding="0" cellspacing="0" 15 align="center"> 16 <tr> 17 <td height="30" align="center">用户名:</td> 18 <td><input type="text" name="username"/>${errerMsg}</td> 19 </tr> 20 <tr> 21 <td height="30" align="center">密 码:</td> 22 <td> <input type="password" name="password"/></td> 23 </tr> 24 <tr> 25 <td height="35" align="center">自动登录时间:</td> 26 <td> <input type="radio" name="autologin" 27 value="${ 60*60*24*30}"/>一个月 28 <input type="radio" name="autologin" 29 value="${ 60*60*24*30*3}"/>三个月 30 <input type="radio" name="autologin" 31 value="${ 60*60*24*30*6}"/>六个月 32 <input type="radio" name="autologin" 33 value="${ 60*60*24*30*10}"/>一年 34 </td> 35 </tr> 36 <tr> 37 <td height="30" colspan="2" align="center"> 38 <input type="submit" value="登录"/> 39 <input type="reset" value="重置"/> 40 </td> 41 </tr> 42 </table> 43 </form> 44 </body> 45 </html>
(3)编写index.jsp页面
1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8" import="java.util.*"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta charset="utf-8"> 7 <title>用户登录</title> 8 <center><h3>用户登录</h3></center> 9 </head> 10 <body style="text-align: center;"> 11 12 <form action="${pageContext.request.contextPath}/LoginServlet" 13 mothod="post"> 14 <table border="1" width="600px" cleepadding="0" cellspacing="0" 15 align="center"> 16 <tr> 17 <td height="30" align="center">用户名:</td> 18 <td><input type="text" name="username"/>${errerMsg}</td> 19 </tr> 20 <tr> 21 <td height="30" align="center">密 码:</td> 22 <td> <input type="password" name="password"/></td> 23 </tr> 24 <tr> 25 <td height="35" align="center">自动登录时间:</td> 26 <td> <input type="radio" name="autologin" 27 value="${ 60*60*24*30}"/>一个月 28 <input type="radio" name="autologin" 29 value="${ 60*60*24*30*3}"/>三个月 30 <input type="radio" name="autologin" 31 value="${ 60*60*24*30*6}"/>六个月 32 <input type="radio" name="autologin" 33 value="${ 60*60*24*30*10}"/>一年 34 </td> 35 </tr> 36 <tr> 37 <td height="30" colspan="2" align="center"> 38 <input type="submit" value="登录"/> 39 <input type="reset" value="重置"/> 40 </td> 41 </tr> 42 </table> 43 </form> 44 </body> 45 </html>
(4)编写LoginServlet.java程序
1 package filter; 2 3 import java.io.IOException; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.Cookie; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 /** 12 * Servlet implementation class LoginServlet 13 */ 14 public class LoginServlet extends HttpServlet { 15 private static final long serialVersionUID = 1L; 16 17 public void doGet(HttpServletRequest request, HttpServletResponse response) 18 throws ServletException, IOException { 19 // TODO Auto-generated method stub 20 // 获取用户名和密码 21 String username = request.getParameter("username"); 22 String password = request.getParameter("password"); 23 // 检查用户名和密码 24 if ("itcast".equals(username) && "123456".equals(password)) { 25 // 验证成功 26 // 将用户状态user对象存入session域 27 User user = new User(); 28 user.setUsername(username); 29 user.setPassword(password); 30 request.getSession().setAttribute("user", user); 31 // 发送自动的cookie 32 String autoLogin = request.getParameter("autologin"); 33 System.out.println(autoLogin); 34 35 if (autoLogin != null) { 36 Cookie cookie = new Cookie("autologin", username + "-" + password); 37 int maxAge=Integer.parseInt(autoLogin); 38 System.out.println(maxAge); 39 cookie.setMaxAge(maxAge); 40 System.out.println("haode"); 41 //System.out.println(Integer.parseInt(autoLogin)); 42 cookie.setPath(request.getContextPath()); 43 response.addCookie(cookie); 44 } 45 // 跳转到首页 46 response.sendRedirect(request.getContextPath() + "/index.jsp"); 47 48 } else { 49 request.setAttribute("errerMsg", "用户名密码错误"); 50 request.getRequestDispatcher("/login.jsp").forward(request, response); 51 } 52 53 } 54 55 public void doPost(HttpServletRequest request, HttpServletResponse response) 56 throws ServletException, IOException { 57 // TODO Auto-generated method stub 58 doGet(request, response); 59 } 60 }
(5)编写LogoutServlet.java
1 package filter; 2 3 import java.io.IOException; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.Cookie; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 /** 12 * Servlet implementation class LogoutServlet 13 */ 14 public class LogoutServlet extends HttpServlet { 15 private static final long serialVersionUID = 1L; 16 //String autoLogin ; 17 public void doGet(HttpServletRequest request, HttpServletResponse response) 18 throws ServletException, IOException { 19 // 用户注销 20 request.getSession().removeAttribute("user"); 21 // 从客户端中删除自动登录的cookie 22 Cookie cookie = new Cookie("autologin", "msg"); 23 cookie.setPath(request.getContextPath()); 24 cookie.setMaxAge(0); 25 response.addCookie(cookie); 26 response.sendRedirect(request.getContextPath() + "/index.jsp"); 27 } 28 29 public void doPost(HttpServletRequest request, HttpServletResponse response) 30 throws ServletException, IOException { 31 // TODO Auto-generated method stub 32 doGet(request, response); 33 } 34 }
(6)编写AutologinFilter过滤器程序
1 package filter; 2 3 import java.io.IOException; 4 import javax.servlet.Filter; 5 import javax.servlet.FilterChain; 6 import javax.servlet.FilterConfig; 7 import javax.servlet.ServletException; 8 import javax.servlet.ServletRequest; 9 import javax.servlet.ServletResponse; 10 import javax.servlet.http.Cookie; 11 import javax.servlet.http.HttpServletRequest; 12 13 14 /** 15 * Servlet Filter implementation class autoLoginFilter 16 */ 17 public class autoLoginFilter implements Filter { 18 19 /** 20 * Default constructor. 21 */ 22 public autoLoginFilter() { 23 // TODO Auto-generated constructor stub 24 } 25 26 /** 27 * @see Filter#destroy() 28 */ 29 public void destroy() { 30 // TODO Auto-generated method stub 31 } 32 33 /** 34 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) 35 */ 36 public void doFilter(ServletRequest req, ServletResponse response, FilterChain chain) 37 throws IOException, ServletException { 38 39 HttpServletRequest request = (HttpServletRequest) req; 40 // 获得一个名为autologin的cookie 41 Cookie[] cookies = request.getCookies(); 42 String autologin = null; 43 for (int i = 0; cookies != null && i < cookies.length; i++) { 44 if ("autologin".equals(cookies[i].getName())) { 45 autologin = cookies[i].getValue(); 46 break; 47 } 48 } 49 if (autologin != null) { 50 // 自动登录 51 String[] parts = autologin.split("-"); 52 String username = parts[0]; 53 String password = parts[1]; 54 if ("itcast".equals(username) && "123456".equals(password)) { 55 // 验证成功 56 // 将用户状态user对象存入session域 57 User user = new User(); 58 user.setUsername(username); 59 user.setPassword(password); 60 request.getSession().setAttribute("user", user); 61 } 62 } 63 chain.doFilter(request, response); 64 } 65 66 /** 67 * @see Filter#init(FilterConfig) 68 */ 69 public void init(FilterConfig fConfig) throws ServletException { 70 // TODO Auto-generated method stub 71 } 72 73 }