フィルタとインターセプタを使用SpringBoot

、フィルタ(フィルタ)

Filterインタフェースを定義したjavax.servletパッケージ、フロントとリアのリクエスト/レスポンスに作用する、Servlet仕様を定義している、管理SringフィルターSpringコンテナのリソースを使用することができるとき、サーブレットコンテナが起動されます。

フィルターを達成

カスタムフィルタを達成するために必要なjavax.servlet.Filter、Filterインタフェースは、三つの方法があります。

  • init(FilterConfig filterConfig):フィルタの初期化が呼び出されます。

  • doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain):でdoFilter()処理、chain.doFilter()フィルタリング動作は、一般的に要求に応じて実行される前に、chain.doFilter後者は、応答コードの動作は、通常行われている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クラス名のデフォルトは優先順位を設定します。使用FilterRegistrationBean優先順位を割り当てることができます。ホワイトリストフィルタリングのURL実施形態をフィルタリングし、設定は、フィルタを設定したい場合は、特定のURLで必要とされていない、のURLインターセプトを必要とdoFilter指定されたメソッド。

二、インターセプタ(インターセプター)

インターセプターは、定義された達成するために必要org.springframework.web.servlet.HandlerInterceptor容器スプリングインターセプターが定義され、それは限りのIoCを通じてインターセプターに注入することができるように、インターセプタは、サービス処理方法の前後に行い、時間の例外をスローするためにドリルダウンすることができ、任意のリソースSpringコンテナを使用することができ、インターフェイス、およびFilerterはこれを行うので、インターセプタに比べてより高い柔軟性をフィルタリングすることはできません。

インターセプタを実装

実装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("/*");
    }
}    
复制代码

インターセプタは、URLをフィルタリングするために指定するかものURL、デフォルトのインターセプトすべてのURLをインターセプトしませ指定することができます。

第三に、呼び出しシーケンス

ます。https://juejin.im/post/5d064bc0e51d4510aa0114f5で再現

おすすめ

転載: blog.csdn.net/weixin_34413802/article/details/93176396