欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot 過濾器 Filter使用實例詳解

 更新時間:2022年10月08日 09:53:56   作者:后端Q  
這篇文章主要為大家介紹了SpringBoot 過濾器Filter使用實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

簡介

過濾器是AOP(面向切面編程)思想的具體實現(xiàn)??梢赃^濾瀏覽器發(fā)出的請求,并且決定放行請求還是中斷請求。

在瀏覽器對服務(wù)器發(fā)起請求或者服務(wù)器對瀏覽器響應(yīng),都會經(jīng)過過濾器。

基于過濾器的機制,我們可以在過濾器中對請求和響應(yīng)做一些處理,可以在過濾器中決定是否放行,例如:校驗請求中有沒有敏感字符串,校驗有沒有Session,實現(xiàn)URL級別的權(quán)限控制、壓縮響應(yīng)信息、編碼格式等。

用法

在spring的應(yīng)用中我們存在兩種過濾的用法,一種是攔截器、另外一種當然是過濾器。我們這里介紹過濾器在springboot的用法,在springmvc中的用法基本上一樣,只是配置上面有點區(qū)別。

功能

filter功能,它使用戶可以改變一個 request和修改一個response. Filter 不是一個servlet,它不能產(chǎn)生一個response,它能夠在一個request到達servlet之前預(yù)處理request,也可以在離開 servlet時處理response.換種說法,filter其實是一個”servlet chaining”(servlet 鏈).

Filter接口中有一個doFilter方法,當開發(fā)人員編寫好Filter類實現(xiàn)doFilter方法,并配置對哪個web資源進行攔截后,WEB服務(wù)器每次在調(diào)用web資源的service方法之前(服務(wù)器內(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)文章

  • 深入理解Java設(shè)計模式之備忘錄模式

    深入理解Java設(shè)計模式之備忘錄模式

    這篇文章主要介紹了JAVA設(shè)計模式之備忘錄模式的的相關(guān)資料,文中示例代碼非常詳細,供大家參考和學(xué)習(xí),感興趣的朋友可以了解
    2021-11-11
  • SpringBoot整合Hibernate Validator實現(xiàn)參數(shù)驗證功能

    SpringBoot整合Hibernate Validator實現(xiàn)參數(shù)驗證功能

    這篇文章主要介紹了SpringBoot整合Hibernate Validator實現(xiàn)參數(shù)驗證功能,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 詳解Java中的println輸入和toString方法的重寫問題

    詳解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)分表分庫

    這篇文章介紹了使用ShardingSphere-Proxy實現(xiàn)分表分庫的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • FF瀏覽器和IE下載文件亂碼問題的解決方法

    FF瀏覽器和IE下載文件亂碼問題的解決方法

    大家可以看到如下截圖,下載文件出現(xiàn)了亂碼,在其他瀏覽器(IE,Chrome....)上沒有出現(xiàn)這個問題,解決方法很簡單,遇到類似問題的朋友可以了解下哦
    2013-08-08
  • sentinel配置 持久化到nacos的詳細過程

    sentinel配置 持久化到nacos的詳細過程

    這篇文章主要介紹了sentinel配置 持久化到nacos的詳細過程,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2024-08-08
  • spring boot注解方式使用redis緩存操作示例

    spring boot注解方式使用redis緩存操作示例

    這篇文章主要介紹了spring boot注解方式使用redis緩存操作,結(jié)合實例形式分析了spring boot注解方式使用redis緩存相關(guān)的依賴庫引入、注解使用及redis緩存相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • Java實現(xiàn)JDBC批量插入原理詳解

    Java實現(xiàn)JDBC批量插入原理詳解

    在JDBC中,executeBatch這個方法可以將多條dml語句批量執(zhí)行,效率比單條執(zhí)行executeUpdate高很多,這是什么原理呢?在mysql和oracle中又是如何實現(xiàn)批量執(zhí)行的呢?本文將給大家介紹這背后的原理
    2023-03-03
  • 詳解Java使用Jsch與sftp服務(wù)器實現(xiàn)ssh免密登錄

    詳解Java使用Jsch與sftp服務(wù)器實現(xiàn)ssh免密登錄

    這篇文章主要介紹了詳解Java使用Jsch與sftp服務(wù)器實現(xiàn)ssh免密登錄,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Java學(xué)習(xí)之異常處理的新特性詳解

    Java學(xué)習(xí)之異常處理的新特性詳解

    異常處理機制是Java很早時就搞出來的技術(shù),但在實際應(yīng)用中,我們發(fā)現(xiàn)這個異常處理也有一些不完善的地方,接下來主要給大家介紹一下Java異常處理的一些新特性,需要的朋友可以參考下
    2023-08-08

最新評論