一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - SpringBoot中使用Filter和Interceptor的示例代碼

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

2019-07-04 16:56克里斯朵夫李維 Java教程

這篇文章主要介紹了SpringBoot中使用Filter和Interceptor的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、Filter(過濾器)

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

實現一個Filter

自定義的過濾器需要實現javax.servlet.Filter,Filter接口中有三個方法:

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

在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); // 過濾器的優先級
    return registrationBean;
  }
}  

通過@WebFilter和@ServletComponentScan

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

二、Interceptor(攔截器)

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

實現一個Interceptor

實現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:在業務處理器處理請求之前被調用。
  • postHandle:在業務處理器處理請求后并生成視圖前被調用,此時有機會修改ModelAndView。
  • afterCompletion:業務處理處理器處理完請求后(已經渲染視圖)被執行,并可以處理業務方法發生異常的場景。

在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。

三、調用順序

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产成人精品视频频 | 果冻传媒天美传媒乌鸦传媒 | 欧美日韩国产另类一区二区三区 | 日本精品一卡二卡≡卡四卡 | 激情视频激情小说 | 香蕉久久一区二区三区啪啪 | 日本一卡2卡3卡4卡乱 | 农村妇女野战bbxxx农村妇女 | 调教全程肉动画片在线观看 | 亚洲免费视频一区二区三区 | 四虎在线视频免费观看视频 | 扒开老师两片湿漉的肉 | 日本天堂影院在线播放 | 蜜桃影像传媒推广 | 精品淑女少妇AV久久免费 | 好紧好爽再叫浪一点点潘金莲 | 欧美日韩亚洲综合久久久 | 亚洲 日韩 国产 制服 在线 | 国产精品每日在线观看男人的天堂 | 精品视频一区二区 | 免费看打屁股视频的软件 | 亚洲AV午夜福利精品香蕉麻豆 | 91欧洲在线视精品在亚洲 | 青青青青青国产费线在线观看 | 美女福利视频网站 | 欧美a级v片不卡在线观看 | 国产精品久久久久久 | 男女全黄h全肉细节文 | 无限好资源第一片免费韩国 | 日本卡一卡2卡3卡4精品卡无人区 | 特黄特黄一级高清免费大片 | 免费黄色网站视频 | 狠狠燥| 日韩不卡一区二区三区 | 热久久最新地址 | 精品在线看 | 成人榴莲视频 | bl放荡受np双性 | 无码乱人伦一区二区亚洲一 | 亚洲成人黄色 | 亚洲 日韩 在线 国产 视频 |