SpringBoot 攔截器
阿新 • • 發佈:2018-12-11
1. 自定義Filter
pring Boot自動添加了OrderedCharacterEncodingFilter和HiddenHttpMethodFilter,並且我們可以自定義Filter。
從輸出日誌可以看到預設新增的Filter
兩個步驟:
- 實現Filter介面,實現Filter方法
- 新增
@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 可以看到,頁面結果如下
再看控制檯輸出日誌,可見自定義的攔截器也有攔截並輸出內容