轻松搞定自定义Filter(过滤器)

版权声明:转载请注明出处 https://blog.csdn.net/cowbin2012/article/details/85194431

过滤器Filter,是Servlet的的一个实用技术了。可通过过滤器,对请求进行拦截,比如读取session判断用户是否登录、判断访问的请求URL是否有访问权限(黑白名单)等。主要还是可对请求进行预处理。接下来介绍下,在springboot如何实现过滤器功能

@WebFilte

利用@WebFilter注解配置

//注册器名称为customFilter,拦截的url为所有
@WebFilter(filterName="customFilter",urlPatterns={"/*"})
@Slf4j
@Configuration
public class CustomFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //项目启动时初始化,只始化一次
        log.info("filter 初始化");
    }

    @Override
    public void doFilter(ServletRequest servletRequest,
                         ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        log.info("doFilter 请求处理");
        //对request、response进行一些预处理
        // 比如设置请求编码
        // servletRequest.setCharacterEncoding("UTF-8");
        // servletResponse.setCharacterEncoding("UTF-8");
        //链路 直接传给下一个过滤器
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {
        log.info("filter 销毁");
    }
}

FilterRegistrationBean方式

两个步骤:

  1. 实现Filter接口,实现Filte

    public class MyFilter implements Filter {
    @Override
    public void destroy() {
    // TODO Auto-generated method stub
    }

     	@Override
     	public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain)
     			throws IOException, ServletException {
     		// TODO Auto-generated method stub
     		HttpServletRequest request = (HttpServletRequest) srequest;
     		System.out.println("this is MyFilter,url :"+request.getRequestURI());
     		filterChain.doFilter(srequest, sresponse);
     	}
    
     	@Override
     	public void init(FilterConfig arg0) throws ServletException {
     		// TODO Auto-generated method stub
     	}
     }
    

    }

  2. 添加@Configuration 注解,将自定义Filter加入过滤链

    @Configuration
    public class WebConfiguration {
    @Bean
    public RemoteIpFilter remoteIpFilter() {
    return new RemoteIpFilter();
    }

     @Bean
     public FilterRegistrationBean testFilterRegistration() {
    
         FilterRegistrationBean registration = new FilterRegistrationBean();
         registration.setFilter(new MyFilter());
         registration.addUrlPatterns("/*");
         registration.addInitParameter("paramName", "paramValue");
         registration.setName("MyFilter");
         registration.setOrder(1);
         return registration;
     }
    

    }

猜你喜欢

转载自blog.csdn.net/cowbin2012/article/details/85194431