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

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;
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}
	
	@Override
	public 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);
	}

	@Override
	public 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. }  

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值