この記事では、Spring Boot インターセプターの簡単な使用例コードを主に紹介します。必要な方は参考にしてください。 meChange インターセプター
LocaleChangeInterceptor と ThemeChangeInterceptor がより一般的に使用されます。
2. カスタム インターセプターの実装には 3 つの手順のみが必要です:
1)、独自のインターセプター クラスを作成し、HandlerInterceptor
インターフェース
を実装します。
2)、
WebMvcConfigurerAdapter を継承する Java クラスを作成し、addInterceptors メソッドをオーバーライドします。3)、カスタム インターセプターをインスタンス化し、オブジェクトをインターセプター チェーン (addInterceptors メソッドで追加) に手動で追加します。
3. コード例IndexInterceptor.java クラス コード:package com.example.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class IndexInterceptor implements HandlerInterceptor{ @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { System.out.println(">>>IndexInterceptor>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)"); } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { System.out.println(">>>IndexInterceptor>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)"); } @Override public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { System.out.println(">>>IndexInterceptor>>>>>>>在请求处理之前进行调用(Controller方法调用之前)"); // 只有返回true才会继续向下执行,返回false取消当前请求 return true; } }
package com.example.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class IndexInterceptor2 implements HandlerInterceptor{ @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { System.out.println(">>>IndexInterceptor2>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)"); } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { System.out.println(">>>IndexInterceptor2>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)"); } @Override public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { System.out.println(">>>IndexInterceptor2>>>>>>>在请求处理之前进行调用(Controller方法调用之前)"); // 只有返回true才会继续向下执行,返回false取消当前请求 return false; } }
package com.example.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import com.example.interceptor.IndexInterceptor; import com.example.interceptor.IndexInterceptor2; //只要能被springboot扫描到即可 @Configuration public class SimpleWebAppConfigurer extends WebMvcConfigurerAdapter{ @Override public void addInterceptors(InterceptorRegistry registry) { // 多个拦截器组成一个拦截器链 // addPathPatterns 用于添加拦截规则 // excludePathPatterns 用户排除拦截 registry.addInterceptor(new IndexInterceptor()).addPathPatterns("/**"); registry.addInterceptor(new IndexInterceptor2()).addPathPatterns("/**"); super.addInterceptors(registry); } }
4.解析命令
preHandle**: プロセッサの前処理 (ログイン チェックなど) を実装する前処理コールバック メソッド。3 番目のパラメーターは応答プロセッサ (前の章のコントローラー実装など) です。戻り値: true はプロセスを続行することを意味します (呼び出しなど)。次のインターセプターまたはプロセッサー); false は、プロセスが中断され (ログインチェックの失敗など)、現時点では他のインターセプターまたはプロセッサーの呼び出しを続行しないことを意味します。 **: プロセッサの後処理を実装する後処理コールバック メソッド (ただしビューをレンダリングする前)。この時点で、modelAndView (モデル
およびビューオブジェクト ) を介してビューを処理できます。 .modelAndView は null である場合もあります。
afterCompletion**: リクエスト全体が処理された後のコールバック メソッド。つまり、ビューがレンダリングされるときにコールバックされます。たとえば、パフォーマンス監視では、ここで終了時間を記録し、消費時間を出力できます。また、finally の try-catch-finally と同様に、リソースのクリーンアップを実行することもできますが、プロセッサ実行チェーンで preHandle が true を返すインターセプタの afterCompletion** のみが呼び出されます。 【関連おすすめ】1.Javaの無料ビデオチュートリアル
2. FastJsonのチュートリアルマニュアル
以上がJavaのインターセプタ例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。