最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、Filter(過濾器)

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

實現(xiàn)一個Filter

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

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

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

實現(xiàn)一個Interceptor

實現(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)用,此時有機會修改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)文章

  • 使用IntelliJ IDEA搭建SSM框架的圖文教程

    使用IntelliJ IDEA搭建SSM框架的圖文教程

    本文通過圖文并茂的形式給大家介紹了使用IntelliJ IDEA搭建SSM框架的教程,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-05-05
  • 詳解spring boot jpa整合QueryDSL來簡化復(fù)雜操作

    詳解spring boot jpa整合QueryDSL來簡化復(fù)雜操作

    這篇文章主要介紹了詳解spring boot jpa整合QueryDSL來簡化復(fù)雜操作,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • SpringBoot中使用RocketMQ的示例代碼

    SpringBoot中使用RocketMQ的示例代碼

    本文主要介紹SpringBoot中使用RocketMQ的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Spring Boot + Mybatis 實現(xiàn)動態(tài)數(shù)據(jù)源案例分析

    Spring Boot + Mybatis 實現(xiàn)動態(tài)數(shù)據(jù)源案例分析

    這篇文章主要介紹了Spring Boot + Mybatis 實現(xiàn)動態(tài)數(shù)據(jù)源,需要的朋友可以參考下
    2018-11-11
  • SpringMVC如何獲取多種類型數(shù)據(jù)響應(yīng)

    SpringMVC如何獲取多種類型數(shù)據(jù)響應(yīng)

    這篇文章主要介紹了SpringMVC如何獲取多種類型數(shù)據(jù)響應(yīng),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • Spring中Transactional注解使用的心得(推薦)

    Spring中Transactional注解使用的心得(推薦)

    這篇文章主要介紹了Spring中Transactional注解使用的心得,事務(wù)是用來控制數(shù)據(jù)的ACID特性的,用于保證數(shù)據(jù)的正確性和完整性,需要的朋友可以參考下
    2022-10-10
  • Java使用Cipher類實現(xiàn)加密的過程詳解

    Java使用Cipher類實現(xiàn)加密的過程詳解

    這篇文章主要介紹了Java使用Cipher類實現(xiàn)加密的過程詳解,Cipher類提供了加密和解密的功能,創(chuàng)建密匙主要使用SecretKeySpec、KeyGenerator和KeyPairGenerator三個類來創(chuàng)建密匙。感興趣可以了解一下
    2020-07-07
  • spring中向一個單例bean中注入非單例bean的方法詳解

    spring中向一個單例bean中注入非單例bean的方法詳解

    Spring是先將Bean對象實例化之后,再設(shè)置對象屬性,所以會先調(diào)用他的無參構(gòu)造函數(shù)實例化,每個對象存在一個map中,當(dāng)遇到依賴,就去map中調(diào)用對應(yīng)的單例對象,這篇文章主要給大家介紹了關(guān)于spring中向一個單例bean中注入非單例bean的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • JAVA操作HDFS案例的簡單實現(xiàn)

    JAVA操作HDFS案例的簡單實現(xiàn)

    本篇文章主要介紹了JAVA操作HDFS案例的簡單實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • java編寫創(chuàng)建數(shù)據(jù)庫和表的程序

    java編寫創(chuàng)建數(shù)據(jù)庫和表的程序

    這篇文章主要為大家詳細(xì)介紹了java編寫創(chuàng)建數(shù)據(jù)庫和表的程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10

最新評論

托克托县| 夏河县| 金秀| 静安区| 华阴市| 芮城县| 云和县| 永仁县| 麦盖提县| 绥棱县| 电白县| 北京市| 阿尔山市| 盐城市| 莱芜市| 福州市| 芦溪县| 青浦区| 乌苏市| 左权县| 吉木萨尔县| 荔波县| 涿州市| 宁都县| 金寨县| 威宁| 班戈县| 台南县| 特克斯县| 卓尼县| 正定县| 剑川县| 衡阳市| 余干县| 铁岭县| 绿春县| 同德县| 罗源县| 德江县| 齐河县| 南昌县|