SpringBoot 過濾器 Filter使用實例詳解
簡介
過濾器是AOP(面向切面編程)思想的具體實現(xiàn)。可以過濾瀏覽器發(fā)出的請求,并且決定放行請求還是中斷請求。
在瀏覽器對服務器發(fā)起請求或者服務器對瀏覽器響應,都會經(jīng)過過濾器。
基于過濾器的機制,我們可以在過濾器中對請求和響應做一些處理,可以在過濾器中決定是否放行,例如:校驗請求中有沒有敏感字符串,校驗有沒有Session,實現(xiàn)URL級別的權(quán)限控制、壓縮響應信息、編碼格式等。
用法
在spring的應用中我們存在兩種過濾的用法,一種是攔截器、另外一種當然是過濾器。我們這里介紹過濾器在springboot的用法,在springmvc中的用法基本上一樣,只是配置上面有點區(qū)別。
功能
filter功能,它使用戶可以改變一個 request和修改一個response. Filter 不是一個servlet,它不能產(chǎn)生一個response,它能夠在一個request到達servlet之前預處理request,也可以在離開 servlet時處理response.換種說法,filter其實是一個”servlet chaining”(servlet 鏈).
Filter接口中有一個doFilter方法,當開發(fā)人員編寫好Filter類實現(xiàn)doFilter方法,并配置對哪個web資源進行攔截后,WEB服務器每次在調(diào)用web資源的service方法之前(服務器內(nèi)部對資源的訪問機制決定的),都會先調(diào)用一下filter的doFilter方法。
實現(xiàn)
Filter的執(zhí)行由Servlet容器回調(diào)完成,因此我們不需要再額外引包。
新建MyFilter類
@Slf4j
@Order(1)
@WebFilter(filterName = "myFilter", urlPatterns = {"/user/*"})
public class MyFilter implements Filter {
@Autowired
private SysUserService sysUserService;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("過濾器初始化");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
log.info("請求處理");
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest) servletRequest;
log.info("MyFilter, URL:{}", request.getRequestURI());
if (request.getRequestURI().contains("login")) {
filterChain.doFilter(servletRequest, servletResponse);
} else {
log.info("非法URL:{}", request.getRequestURI());
response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
PrintWriter writer = response.getWriter();
writer.print("no access");
}
}
@Override
public void destroy() {
log.info("過濾器銷毀");
}
}
用@WebFilter注解,指定攔截路徑以及一些參數(shù),同時需要在啟動類使用@ServletComponentScan掃描帶@WebFilter、@WebServlet、@WebListener并將幫我們注入bean
@ServletComponentScan
@SpringBootApplication
public class DevRootApplication {
public static void main(String[] args) {
SpringApplication.run(DevRootApplication.class, args);
}
}
當有多個過濾器之后,就需要規(guī)定各個過濾器的指定順序了。
使用@Order()注解
以上就是SpringBoot 過濾器 Filter使用實例詳解的詳細內(nèi)容,更多關(guān)于SpringBoot Filter過濾器的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot整合Hibernate Validator實現(xiàn)參數(shù)驗證功能
這篇文章主要介紹了SpringBoot整合Hibernate Validator實現(xiàn)參數(shù)驗證功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06
詳解Java中的println輸入和toString方法的重寫問題
這篇文章主要介紹了Java中的println輸入和toString方法的重寫,一個對象數(shù)組在調(diào)用Arrays.toString打印時,相當于遍歷數(shù)組,然后打印里邊每個對象,這再打印對象就調(diào)用對象自己的toString了,需要的朋友可以參考下2022-04-04
使用ShardingSphere-Proxy實現(xiàn)分表分庫
這篇文章介紹了使用ShardingSphere-Proxy實現(xiàn)分表分庫的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-02-02
詳解Java使用Jsch與sftp服務器實現(xiàn)ssh免密登錄
這篇文章主要介紹了詳解Java使用Jsch與sftp服務器實現(xiàn)ssh免密登錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10

