SpringBoot-(4)-Filter的使用
阿新 • • 發佈:2018-12-02
一,Filter
Filter功能,它使使用者可以改變一個 request和修改一個response. Filter 不是一個servlet,它不能產生一個response,它能夠在一個request到達servlet之前預處理request,也可以在離開 servlet時處理response.換種說法,filter其實是一個”servlet chaining”(servlet 鏈).
一個Filter包括:
在servlet被呼叫之前截獲;
在servlet被呼叫之前檢查servlet request;
根據需要修改request頭和request資料;
根據需要修改response頭和response資料;
在servlet被呼叫之後截獲.
二,SpringBoot實現Filter
1,實現Filter介面
package com.example.demo.filters; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.IOException; /** * Created by zhang_guang_yang on 2018/11/21. */ /* * Order表示過濾順序,值越小,越優先過濾*/ @Order(1) @WebFilter(filterName = "registerFilter", urlPatterns = "/register") public class RegisterFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) servletRequest; String token = req.getHeader("token"); String userAgent = req.getHeader("User-Agent"); System.out.println("token: " + token); System.out.println("user-agent: " + userAgent); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { } }
@Order:過濾順序,值越小,越優先過濾。
@WebFilter:過濾介面配置
2 ,新增ServletComponentScan註解
@ServletComponentScan(basePackages = {"com.example.demo.filters"} ) public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
@ServletComponentScan:掃描配置。
3 ,執行效果:
三,也可以都在Filter中配置,不在MainApplication中新增任何註解
package com.example.demo.filters; import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.IOException; /** * Created by zhang_guang_yang on 2018/11/21. */ @Component @ServletComponentScan @WebFilter(urlPatterns = "/register") public class RegisterFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) servletRequest; String token = req.getHeader("token"); String userAgent = req.getHeader("User-Agent"); System.out.println("token: " + token); System.out.println("user-agent: " + userAgent); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { } }