1. 程式人生 > >【系統學習SpringBoot】SpringBoot自定義Filter

【系統學習SpringBoot】SpringBoot自定義Filter


SpringBoot自定義Filter

SpringBoot自動添加了OrderedCharacterEncodingFilter和HiddenHttpMethodFilter,當然我們可以自定
義Filter。

自定義Filter需要兩個步驟:

  1. 實現Filter【javax.servlet.Filter】介面,實現Filter方法
  2. 新增 @Configuration 註解,將自定義Filter加入過濾鏈

【過濾列印請求URL】例項程式碼如下:
package xatu.zsl.Filter;

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 javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; /** * Created by zsl on 2017/9/3. */
@Configuration public class ConfigurationFilter { @Bean public RemoteIpFilter remoteIpFilter() { return new RemoteIpFilter(); } @Bean public FilterRegistrationBean testFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new
MyFilter());//新增過濾器 registration.addUrlPatterns("/*");//設定過濾路徑,/*所有路徑 registration.addInitParameter("name", "alue");//新增預設引數 registration.setName("MyFilter");//設定優先順序 registration.setOrder(1);//設定優先順序 return registration; } public class MyFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) srequest; //列印請求Url System.out.println("this is MyFilter,url :" + request.getRequestURI()); filterChain.doFilter(srequest, sresponse); } @Override public void init(FilterConfig arg0) throws ServletException { } } }

這裡寫圖片描述


有人好奇public FilterRegistrationBean testFilterRegistration() 這個方法返回的FilterRegistrationBean如何在Coltroller中獲取?,(●’◡’●),我很好奇,,於是乎!搞了點事情

在Controller中獲取剛才ConfigurationFilter中【registration.addInitParameter(“name”, “alue”);//新增預設引數】這個設定的引數。

在Controller中加入如下程式碼就能獲取(剛才【testFilterRegistration()】方法加了註解@Bean,所以Spring容器中會有一個例項, @Autowired就理所應當的注入進來了。)

    @Autowired
    FilterRegistrationBean registration;

    @GetMapping("/getname")
    public Map<String, String> getName() {
        Map<String, String> initParameters = registration.getInitParameters();
        return initParameters;
    }

這裡寫圖片描述