亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot中使用Filter和Interceptor的示例代碼

 更新時(shí)間:2019年06月18日 14:56:43   作者:克里斯朵夫李維  
這篇文章主要介紹了SpringBoot中使用Filter和Interceptor的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、Filter(過濾器)

Filter接口定義在javax.servlet包中,是Servlet規(guī)范定義的,作用于Request/Response前后,被Servlet容器調(diào)用,當(dāng)Filter被Sring管理后可以使用Spring容器資源。

實(shí)現(xiàn)一個(gè)Filter

自定義的過濾器需要實(shí)現(xiàn)javax.servlet.Filter,F(xiàn)ilter接口中有三個(gè)方法:

  • init(FilterConfig filterConfig):過濾器初始化的被調(diào)用。
  • doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain):在doFilter()方法中,chain.doFilter()前的一般是對request執(zhí)行的過濾操作,chain.doFilter后面的代碼一般是對response執(zhí)行的操作,chain.doFiter()執(zhí)行下一個(gè)過濾器或者業(yè)務(wù)處理器。
  • destory():過濾器銷毀的時(shí)候被調(diào)用。

在Spring容器中使用過濾器

通過FilterRegistrationBean

 @Configuration
 public class WebConfig{
  @Bean
  public FilterRegistrationBean xxxFilter() {
    FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    registrationBean.setFilter(new xxxFilter());
    registrationBean.setUrlPatterns(Arrays.asList("/*"));
    registrationBean.setOrder(1); // 過濾器的優(yōu)先級
    return registrationBean;
  }
}  

通過@WebFilter和@ServletComponentScan

通過@WebFilter的方式定義Filter,默認(rèn)使用Filter的類名設(shè)置優(yōu)先級。使用FilterRegistrationBean可以指定優(yōu)先級。Filter使用白名單過濾Url的方式,配置需要攔截的Url,如果想設(shè)置不過濾某些Url需要在doFilter方法中指定。

二、Interceptor(攔截器)

定義一個(gè)Interceptor需要實(shí)現(xiàn)org.springframework.web.servlet.HandlerInterceptor接口,Interceptor是Spring容器定義的,它可以使用Spring容器的任何資源,只要通過IoC注入到Interceptor即可,Interceptor可以深入到業(yè)務(wù)處理方法的執(zhí)行前后和拋出異常的時(shí)候,而Filerter無法做到這一點(diǎn),所以Interceptor相比Filter具有更大的彈性。

實(shí)現(xiàn)一個(gè)Interceptor

實(shí)現(xiàn)HandlerInterceptor或者繼承HandlerInterceptorAdapter

public interface HandlerInterceptor {
  default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    return true;
  }

  default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
  }

  default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
  }
}

  • preHandle:在業(yè)務(wù)處理器處理請求之前被調(diào)用。
  • postHandle:在業(yè)務(wù)處理器處理請求后并生成視圖前被調(diào)用,此時(shí)有機(jī)會修改ModelAndView。
  • afterCompletion:業(yè)務(wù)處理處理器處理完請求后(已經(jīng)渲染視圖)被執(zhí)行,并可以處理業(yè)務(wù)方法發(fā)生異常的場景。

在Spring容器中使用攔截器

@Configuration
public class WebConfig implements WebMvcConfigurer {

  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    InterceptorRegistration registration = registry.addInterceptor(new TimeInterceptor());
    registration.excludePathPatterns("/user");
    registration.excludePathPatterns("/*");
  }
}  

Interceptor既可以指定要過濾的Url也可以指定不攔截的Url,缺省情況攔截所有Url。

三、調(diào)用順序

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JAVA 文件監(jiān)控 WatchService的示例方法

    JAVA 文件監(jiān)控 WatchService的示例方法

    本篇文章主要介紹了JAVA 文件監(jiān)控 WatchService的示例方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • ConstraintValidator類如何實(shí)現(xiàn)自定義注解校驗(yàn)前端傳參

    ConstraintValidator類如何實(shí)現(xiàn)自定義注解校驗(yàn)前端傳參

    這篇文章主要介紹了ConstraintValidator類實(shí)現(xiàn)自定義注解校驗(yàn)前端傳參的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java實(shí)戰(zhàn)房屋租賃網(wǎng)的實(shí)現(xiàn)流程

    Java實(shí)戰(zhàn)房屋租賃網(wǎng)的實(shí)現(xiàn)流程

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)一個(gè)房屋租賃網(wǎng)站,大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • Mybatis 中的sql批量修改方法實(shí)現(xiàn)

    Mybatis 中的sql批量修改方法實(shí)現(xiàn)

    在項(xiàng)目中遇到需要批量更新的功能,原本想的是在Java中用循環(huán)訪問數(shù)據(jù)庫去更新,但是心里總覺得這樣做會不會太頻繁了,太耗費(fèi)資源了,效率也很低,查了下mybatis的批量操作,原來確實(shí)有<foreach>標(biāo)簽可以做到,下面通過本文給大家介紹下
    2017-01-01
  • Java基礎(chǔ)學(xué)習(xí)筆記之?dāng)?shù)組詳解

    Java基礎(chǔ)學(xué)習(xí)筆記之?dāng)?shù)組詳解

    這篇文章主要介紹了Java基礎(chǔ)學(xué)習(xí)筆記之?dāng)?shù)組,結(jié)合實(shí)例形式詳細(xì)分析了java的基本概念、定義、迭代、輸出、反轉(zhuǎn)、排序等常用操作技巧,需要的朋友可以參考下
    2019-08-08
  • Maven中plugins與pluginManagement的區(qū)別說明

    Maven中plugins與pluginManagement的區(qū)別說明

    這篇文章主要介紹了Maven中plugins與pluginManagement的區(qū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Spring通過三級緩存解決循環(huán)依賴問題的過程詳解

    Spring通過三級緩存解決循環(huán)依賴問題的過程詳解

    循環(huán)依賴指的是在對象之間存在相互依賴關(guān)系,形成一個(gè)閉環(huán),導(dǎo)致無法準(zhǔn)確地完成對象的創(chuàng)建和初始化,本文主要介紹了Spring通過三級緩存解決循環(huán)依賴的方法,需要的可以參考下
    2023-10-10
  • springBoot集成redis(jedis)的實(shí)現(xiàn)示例

    springBoot集成redis(jedis)的實(shí)現(xiàn)示例

    Redis是我們Java開發(fā)中,使用頻次非常高的一個(gè)nosql數(shù)據(jù)庫,本文主要介紹了springBoot集成redis(jedis)的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Java中Socket用法詳解

    Java中Socket用法詳解

    本文詳細(xì)講解了Java中Socket的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Java數(shù)組操作的10大方法

    Java數(shù)組操作的10大方法

    下面是精心整理的Java數(shù)組操作的10大方法,大部分代碼都來自Stack Overflow,需要的朋友可以參考下
    2014-09-09

最新評論