JavaWeb 利用cookie及过滤器实现30天内自动登录 简单步骤

来源:互联网 发布:java微信接口开发实例 编辑:程序博客网 时间:2024/05/29 03:24

dfsfd

第一步:准备页面


  1. <body>  
  2.     <h1>用户登录</h1><hr>  
  3.     <form action="${pageContext.request.contextPath }/servlet/LoginServlet" method="POST">  
  4.         用户名<input type="text" name="name" />  
  5.         密码<input type="password" name="password" />  
  6.         <input type="checkbox" name="autologin" value="true"/>30天内自动登陆  
  7.         <input type="submit" value="登录"/>   
  8.     </form>  
  9.   </body>  

第二步:创建自己的MyServlet 来处理自动登录  spring controller同理


  1. public class MyServlet extends HttpServlet {  
  2.   
  3.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  4.             throws ServletException, IOException {  
  5.             //1,登录校验 
  6.               
  7.                 //2,如果用户勾选过30天内自动登陆,发送自动登陆cookie
  8.                 if("true".equals(request.getParameter("autologin"))){  
  9.                     Cookie autologinC = new Cookie("autologin",user.getName()+":"+user.getPassword());  
  10.                     autologinC.setPath(request.getContextPath());  
  11.                     autologinC.setMaxAge(3600*24*30);  
  12.                     response.addCookie(autologinC);  
  13.                 }  
  14.                   
  15.                 //4.重定向到主页  
  16.                 response.sendRedirect(request.getContextPath()+"/index.jsp");  
  17.         }  
  18.     }  
  19. }  


第三步:创建 自己的AutoLoginFilter过滤器

@Component()public class AutologinFilter implements Filter {private UserController userController;@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {try {ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:spring-mvc.xml");this.userController = ctx.getBean(UserController.class);} catch (BeansException e) {e.printStackTrace();}HttpServletRequest req = (HttpServletRequest) request;          HttpServletResponse resp = (HttpServletResponse) response;          //1.只有未登录的用户才能自动登陆          if(req.getSession(false)==null || req.getSession().getAttribute("user")==null){                            //2.只有带了自动登陆cookie的用户才能自动登陆              Cookie [] cs = req.getCookies();              Cookie findC = null;              if(cs!=null){                  for(Cookie c : cs){                      if("autologin".equals(c.getName())){                          findC = c;                          break;                      }                  }              }                            if(findC!=null){                  //3.自动登录Cookie中保存的用户名密码都需要是正确的才能自动登陆                  String loginname = findC.getValue().split(":")[0];                  String password= findC.getValue().split(":")[1];      ModelMap model = new ModelMap();    SerializeObject serializeObject = userController.getLoginBeanInfoByParams(req, resp, model, loginname, password);    if(serializeObject != null){//如果登录成功,则返回主页面    if(ResultType.NORMAL == serializeObject.getStatus()){    request.getRequestDispatcher("user/login?loginname="+loginname+"&password="+password).forward(request, response);    }else{    request.getRequestDispatcher("/login.jsp").forward(request, response);    }    }            }              //无论是否自动登陆,都放行资源              chain.doFilter(request, response);  }        request.getRequestDispatcher("/login.jsp").forward(request, response);}@Overridepublic void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}}

第三步:注册过滤器

  1. <filter>  
  2.                 <description>自动登陆过滤器</description>  
  3.                 <filter-name>AutologinFilter</filter-name>  
  4.                 <filter-class>com.itheima.filter.AutologinFilter</filter-class>  
  5.             </filter>  
  6.             <filter-mapping>  
  7.                 <filter-name>AutologinFilter</filter-name>  
  8.                 <url-pattern>/*</url-pattern>  
  9.             </filter-mapping>  

扩展:注销功能

  1. public class LogoutServlet extends HttpServlet {  
  2.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  3.             throws ServletException, IOException {  
  4.         if(request.getSession(false)!=null){  
  5.             request.getSession().invalidate();  
  6.   
  7.             //删除自动登录 cookie  
  8.             Cookie autologinC = new Cookie("autologin""");  
  9.             autologinC.setPath(request.getContextPath());  
  10.             autologinC.setMaxAge(0);  
  11.             response.addCookie(autologinC);  
  12.         }  
  13.         response.sendRedirect(request.getContextPath()+"/index.jsp");  
  14.     }  
  15. }  

原创粉丝点击