zoukankan      html  css  js  c++  java
  • Filter实现用户自动登录

    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">密  &nbsp;码:</td>
    22                 <td> &nbsp; &nbsp;<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="登录"/> &nbsp; &nbsp; &nbsp; &nbsp;
    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">密  &nbsp;码:</td>
    22                 <td> &nbsp; &nbsp;<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="登录"/> &nbsp; &nbsp; &nbsp; &nbsp;
    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 }
  • 相关阅读:
    Linux命令格式及7个常见终端命令
    Linux主要目录速查表
    Linux和Windows系统目录结构区别
    C语言下进制的使用
    C语言变量和常量
    C语言的关键字和数据类型
    Linux下交换文件说明
    gcc编译过程
    C语言图形界面QT和MFC(待学)
    字符编码问题
  • 原文地址:https://www.cnblogs.com/tianliang94/p/10995205.html
Copyright © 2011-2022 走看看