最近、検査システムをやって、マイクロチャネルの小さなプログラムページは、バックエンドのためのデータは、インターセプタの使用上の自然な色調あるフロントエンド、バックエンドのインタフェースが行うようにしています。時間に追わビットが、これは構造、後で補足を書くことがちょうど約あります。
1.HandlerInterceptorAdapter
preHandleサービスプロセッサ処理サービスは、前処理の前に呼び出されます。
業務処理後postHandle呼び出し、後処理、
afterCompletion要求のDispatcherServletコールを処理する完全に終了された後、リソースをクリーンアップするために使用することができます。EXに従って判定した場合に異常が発生したか否かがヌルであってもよいです。
輸入org.springframework.web.servlet.ModelAndView。 輸入org.springframework.web.servlet.handler.HandlerInterceptorAdapter。 インポートのjavax.servlet.http.HttpServletRequest; インポートのjavax.servlet.http.HttpServletResponse; / ** * @authorのスワン * / パブリック クラス LoginInterceptorは延びHandlerInterceptorAdapter { @Override パブリック ブール preHandle(HttpServletRequestのリクエスト、HttpServletResponseの応答、オブジェクト・ハンドラ)がスロー例外{ 文字列のURL = 。request.getRequestURI()のtoString(); System.out.println("preHandle:" + URL); 返す 真; } @Override 公共 ボイド postHandle(HttpServletRequestのリクエスト、HttpServletResponseの応答、オブジェクト・ハンドラのModelAndViewのModelAndView)スロー例外{ 文字列のURL = request.getRequestURIを()のtoString()。 System.out.println( "postHandle:" + URL); スーパー.postHandle(要求、応答、ハンドラ、のModelAndView)。 } @Override 公共 ボイド afterCompletion(HttpServletRequestのリクエスト、HttpServletResponseの応答、オブジェクト・ハンドラは、例外EX)がスロー例外{ するSystem.out.println( "afterCompletion:" + EX)を、 スーパー.afterCompletion(要求、応答、ハンドラ、EX); } }
2.WebMvcConfigurerAdapterインターセプタを追加
addInterceptorsは、必要なインターセプタインスタンスHandlerInterceptorインタフェースを実現します
インターセプタを設定するためのaddPathPatternsパスフィルタルール
excludePathPatterns:インターセプトする必要はありませんフィルタリングルールを設定するために使用
輸入org.springframework.context.annotation.Bean。 輸入org.springframework.context.annotation.Configuration。 輸入org.springframework.web.servlet.config.annotation.InterceptorRegistry。 輸入org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter。 / ** * @authorのスワン * / @Configuration パブリック クラス InterceptorConfigは拡張WebMvcConfigurerAdapter { @Override 公共 のボイドaddInterceptors(InterceptorRegistryレジストリ){ registry.addInterceptor(loginInterceptor())を。addPathPatterns("/login/**").excludePathPatterns("/hello/**" ); } @Bean 公共 LoginInterceptor loginInterceptor(){ 戻り 新しいLoginInterceptorを();} }
3.テストセットインターセプターパス
輸入org.springframework.web.bind.annotation.GetMapping。 輸入org.springframework.web.bind.annotation.RequestMapping。 輸入org.springframework.web.bind.annotation.RestController。 / ** * @authorのスワン * / @RestController @RequestMapping( "/ログイン" ) のパブリック クラスUserControllerで{ @GetMapping( "/テスト" ) 公共 ボイドテスト(){ System.out.printlnは( "loginTest" ); } }
ブラウザのリクエスト:HTTP:// localhostを:8080 /ログイン/テスト
输出: preHandle: /ログイン/ テスト loginTest postHandle: /ログイン/ テスト afterCompletion:ヌル
4.テストインターセプト経路が設けられていません
輸入org.springframework.web.bind.annotation.GetMapping。 輸入org.springframework.web.bind.annotation.RequestMapping。 輸入org.springframework.web.bind.annotation.RestController。 / ** * @authorのスワンの *の@date 2019年6月13日 * / @RestController @RequestMapping( "/ハロー" ) パブリック クラスHelloController { @GetMapping( "/テスト" ) 公共 ボイド 試験(){ System.out.printlnは( "helloTest" )。 } }
ブラウザのリクエスト:HTTP:// localhostを:8080 /こんにちは/テスト
出力:
helloTest
ます。https://www.cnblogs.com/suwan1125/p/11016971.htmlで再現