二、SpringBoot-Filter过滤器

1、创建过滤器,创建包com.hugh.filter用来存放过滤器,在该包下创建PCFilter类

package com.hugh.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

/**
 * @description PC端过滤器
 * @author Hugh.liu
 * @date 2018年11月26日
 * @version 1.0
 */
public class PCFilter implements Filter {

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) srequest;
        System.out.println("PC端拦截器:" + request.getRequestURI());
        filterChain.doFilter(srequest, sresponse);
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
    }

}

2、为了演示多个过滤器的配置特加了两个过滤器,在com.hugh.filter包下创建MobileFilter类

package com.hugh.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

/**
 * @description Mobile端过滤器
 * @author Hugh.liu
 * @date 2018年11月26日
 * @version 1.0
 */
public class MobileFilter implements Filter {

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) srequest;
        System.out.println("Mobile端拦截器:" + request.getRequestURI());
        filterChain.doFilter(srequest, sresponse);
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
    }

}

3、创建配置类并配置两个过滤器,创建包com.hugh.config用来存放配置类,在该包下创建FilterConfig类

package com.hugh.config;

import org.apache.catalina.filters.RemoteIpFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.hugh.filter.MobileFilter;
import com.hugh.filter.PCFilter;

/**
 * @description 过滤器配置类
 * @author Hugh.liu
 * @date 2018年11月26日
 * @version 1.0
 */
@Configuration
public class FilterConfig {

    @Bean
    public RemoteIpFilter remoteIpFilter() {
        return new RemoteIpFilter();
    }
    
    /**
     * PC端过滤器
     * @return
     */
    @Bean
    public FilterRegistrationBean pcFilterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new PCFilter());
        registration.addUrlPatterns("/*");
        registration.addInitParameter("paramName", "paramValue");
        registration.setName("PCFilter");
        registration.setOrder(1);
        return registration;
    }
    
    /**
     * Mobile过滤器
     * @return
     */
    @Bean
    public FilterRegistrationBean mobileFilterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new MobileFilter());
        registration.addUrlPatterns("/*");
        registration.addInitParameter("paramName", "paramValue");
        registration.setName("MobileFilter");
        registration.setOrder(2);
        return registration;
    }
    
}

说明:@Configuration注解,将自定义Filter加入过滤链

registration.setOrder(1);过滤器顺序按order的大小排序,数字越小越先执行

4、再执行http://localhost:8080/helloWorld,控制台输出如下证明已成功:

 

posted @ 2018-11-26 23:25  hugh_liu  阅读(25)  评论(0)    收藏  举报