过滤器Filter

Posted duguangming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了过滤器Filter相关的知识,希望对你有一定的参考价值。

使用背景:

  一个项目中需要做多次需求判断时,例如商城中加入购物车需要登陆判断,我的购物车需要需求判断,我的 订单、我的收藏等等,都需要做是否登陆判断,就可以使用过滤器,把这些需求过滤下来。

使用步骤:

  1 创建一个包 com.xxx.filter
  2 在包中创建一个类 实现 Filter接口和三个实现方法
  3 在 doFilter中

 @Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
// 设置编码方式
req.setCharacterEncoding("UTF-8");
filterChain.doFilter(req,resp);//放行
}

4 在 web.xml配置

<filter>
        <filter-name>dd</filter-name>
        <filter-class>com.guangming.filter.CharacterEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>dd</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

  /* 所有请求都过滤
  /emp/* 过滤 emp下所有请求 
  *.do 过滤所有以.do结尾的请求

5.过滤器代码

@WebFilter("*.do")//拦截需要进行登陆校验的请求   加入购物车和我的购物车(addCart.do/myCart.do)
public class LoginFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
    /*判断是否登陆*/
        //为什么强转成HttpServlet: ServletRequest没有getSession().setAttribute方法
        HttpServletRequest req= (HttpServletRequest) request;
        HttpServletResponse resp= (HttpServletResponse) response;

        Object user = req.getSession().getAttribute("user");
        if (user==null){
            //session中没有获取到用户信息,证明没有登陆,则跳转到登陆界面
            resp.sendRedirect("/shop/views/login.jsp");
        }else {
            /*不加else,未放行,界面加载不出来*/
            //session中获取到了用户信息,证明已经登陆,则放行
            filterChain.doFilter(req,resp);
        }
    }

    @Override
    public void destroy() {

    }
}

 

以上是关于过滤器Filter的主要内容,如果未能解决你的问题,请参考以下文章

基于内部片段的graphql过滤器(gatsbyJS)

使用Logstash filter grok过滤日志文件

servlet,过滤器,监听器,拦截器的区别

vue实现简单的过滤器

Scapy BPF 过滤器不工作

在着色器中访问时,OpenGL如何决定使用MAG_FILTER和MIN_Filter?