1. 程式人生 > >SpringBoot 攔截器

SpringBoot 攔截器

1. 自定義Filter

pring Boot自動添加了OrderedCharacterEncodingFilter和HiddenHttpMethodFilter,並且我們可以自定義Filter。

從輸出日誌可以看到預設新增的Filter

兩個步驟:

  1. 實現Filter介面,實現Filter方法
  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("name", "wcb");registration.setinitParameter("age",26);//新增預設引數 registration.setOrder(1);//設定優先順序 return registration; } 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 { 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 } } }
//新增過濾器 registration.addUrlPatterns("/*");//設定過濾路徑,/*所有路徑 registration.addInitParameter("name", "wcb");registration.setinitParameter("age",26);//新增預設引數 registration.setOrder(1);//設定優先順序 return registration; } 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 { 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 } } }
@RestController
public class TestController {
	@Autowired
	private FilterRegistrationBean filterRegistrationBean;
	@RequestMapping("/test")
	public Map<String, String> test() {
		return filterRegistrationBean.getInitParameters();
	}
}

訪問http://localhost:8080/test 可以看到,頁面結果如下

再看控制檯輸出日誌,可見自定義的攔截器也有攔截並輸出內容