java过滤器原理分析以及实现,通过过滤器实现自动登陆

1、过滤器

1、过滤器

1.1、过滤器的原理

1、Filter过滤器,
□   它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

□   它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理

1.2、过滤器的配置

指定一个过滤器。
    用于为过滤器指定一个名字,该元素的内容不能为空
    元素用于指定过滤器的完整的限定类名。
    元素用于为过滤器指定初始化参数
        指定参数的名字
        指定参数的值   
      在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。
     元素用于为过滤器指定初始化参数
        指定参数的名字
        指定参数的值   
      在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。

元素用于设置一个 Filter 所负责拦截的资源。一个Filter拦截的资源可通过两种方式来指定:Servlet 名称和资源访问的请求路径
    子元素用于设置filter的注册名称
    设置 filter 所拦截的请求路径(过滤器关联的URL样式)

1.3、过滤器的生命周期

当web容器启动的时候,自动调用过滤器的init(FilterConfig arg0)方法来对filter进行初始化,当web关闭,关机,或者reload整个应用时,都会调用destroy()来关闭filter。在容器存活期间,filter过滤器一直是存活的。

1.4、过滤器的自动登陆实现

//1、如果session中存在user,直接放行
		//2、如果不存在session,到cookie中获取用户名密码
				//2.1如果有用户名密码,到数据库查询是否在
					//2.1.1如果存在,存在session中,放行
					//2.1.2如果不存在,放行。
				//2.2如果用户名密码不存在,放行。
		
HttpServletRequest req = (HttpServletRequest)request;

User user = (User)req.getSession().getAttribute("user");

//1、如果session中存在user,直接放行
if(user!=null){
  chain.doFilter(req, response);
}else{
  //session中不存在。到cookie中去查找。ctrl+2   l
  Cookie[] cookies = req.getCookies();
  String userJson = "";
  for (Cookie cookie : cookies) {
    if("user".equals(cookie.getName())){
      userJson = cookie.getValue();
    }
  }

  //cookie中不存在用户信息
  if("".equals(userJson)||userJson==null){
    chain.doFilter(req, response);
  }else{
  
	//cookie中存在用户信息
    user = JsonUtils.jsonToPojo(userJson, User.class);
    QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
    String sql = "select * from user where username = ? and password =?";
    try {
      user = qr.query(sql, new BeanHandler<User>(User.class),user.getUsername(),user.getPassword());
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    if(user==null){
      chain.doFilter(req, response);
    }else{
      req.getSession().setAttribute("user", user);
      chain.doFilter(req, response);
    }
  }
}

你可能感兴趣的:(java-web)