Servlet之过滤器

Servlet分为三种:标准的Servlet----MVC中控制器 、过滤Servlet(过滤器)、监听Servlet(监听器)。

过滤器: Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过过滤器,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理。

过滤器功能:
1,判断是否是非法用户(判断session是否存在属性)
2,屏蔽非法文字(反动、骂人之类的敏感词)
3,对请求的内容进行统一的编码

编码过滤器:

public class EncodingFilter implements Filter {
     
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
     
    System.out.println("----EncodingFilter初始化-----------");
  }

  /**
     * 设置过滤规则
     * 设置请求的下一步操作
     * @param servletRequest
     *  servletRequest是HttpServletRequest的父类,HttpServletRequest相当于jsp中的request对象
     * @param servletResponse
     *  servletResponse是HttpServletResponse的父类,HttpServletResponse相当于jsp中的response对象
     * @param filterChain
     *  filterChain用于控制请求的下一步操作,同时将最新的的request及response对象携带过去
     * @throws IOException
     * @throws ServletException
     */
  @Override
  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
     
    System.out.println("-----EncodingFilter---doFilter---------");
    //设置过滤规则为编码处理
    servletRequest.setCharacterEncoding("utf-8");
    servletResponse.setCharacterEncoding("utf-8");
    //指定请求的下一步操作(放过)
    filterChain.doFilter(servletRequest,servletResponse);
  }

  @Override
  public void destroy() {
     
    System.out.println("----EncodingFilter销毁-----------");
  }
}

页面访问权限控制过滤器:

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
     
  //获取用户的登录标识
  HttpServletRequest request = (HttpServletRequest)servletRequest;
  HttpServletResponse response = (HttpServletResponse)servletResponse;
  HttpSession session = request.getSession();
  Object object = session.getAttribute("user");
  //判断用户是否已登录
  if(object == null){
     //未登录
    response.sendRedirect("/login.jsp");
  } else{
     
    //放过
    filterChain.doFilter(servletRequest,servletResponse);
  }
}

你可能感兴趣的:(Servlet之过滤器)