91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Filter和Interceptor怎么在SpringBoot中使用

發布時間:2021-03-24 17:20:35 來源:億速云 閱讀:249 作者:Leah 欄目:編程語言

本篇文章為大家展示了Filter和Interceptor怎么在SpringBoot中使用,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

一、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。

上述內容就是Filter和Interceptor怎么在SpringBoot中使用,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

渭源县| 沁阳市| 泾源县| 岳阳县| 阿图什市| 宁乡县| 武陟县| 玉山县| 禄劝| 沙雅县| 错那县| 项城市| 曲水县| 乐安县| 钟祥市| 玉环县| 潍坊市| 金堂县| 邢台县| 淮滨县| 都昌县| 岐山县| 玛纳斯县| 乌兰察布市| 宁南县| 宽城| 合作市| 边坝县| 桂林市| 南岸区| 增城市| 香河县| 彩票| 泌阳县| 南昌市| 景谷| 兴义市| 柳林县| 湛江市| 乌鲁木齐市| 彝良县|