一、Filter功能
它使使用者可以改變一個 request和修改一個response. Filter 不是一個servlet,它不能産生一個response,它能夠在一個request到達servlet之前預處理request,也可以在離開 servlet時處理response.換種說法,filter其實是一個 “servlet chaining” (servlet 鍊).
一個Filter包括:
1)、在servlet被調用之前截獲;
2)、在servlet被調用之前檢查servlet request;
3)、根據需要修改request頭和request資料;
4)、根據需要修改response頭和response資料;
5)、在servlet被調用之後截獲.
二、自定義Filter
- 方法一:
- 實作filter方法
public class GlobalFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; String requestURI = request.getRequestURI(); System.out.println(requestURI); filterChain.doFilter(request, servletResponse); } @Override public void destroy() { } }
- 加載Filter 配置
@Configuration public class FilterConfig { @Bean public FilterRegistrationBean filterRegistration(){ // 建立過濾器注冊類 FilterRegistrationBean registration = new FilterRegistrationBean(); // 添加自定義 過濾器 registration.setFilter(globalFilter()); // 設定過濾器的URL模式 registration.addUrlPatterns("/*"); //設定過濾器順序 registration.setOrder(1); return registration; } @Bean public GlobalFilter globalFilter(){ return new GlobalFilter(); } }
- 方法二(推薦)
- 自定義MyFilter, 如果請求URI 包含
, 則進行下一步處理my
@WebFilter(filterName = "myFilter", urlPatterns = "/*") public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("init..."); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; String requestURI = request.getRequestURI(); if(requestURI.contains("my")){ System.out.println("成功啦。。。, 請求URI是:" + requestURI); } filterChain.doFilter(request, servletResponse); } @Override public void destroy() { System.out.println("destroy..."); } }
- 在Application 啟動類 添加
注解@ServletComponentScan
@ServletComponentScan @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
- 自定義MyFilter, 如果請求URI 包含
轉載于:https://www.cnblogs.com/XtsLife/p/11383842.html