<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 一、攔截器 ### 定義 在 Servlet 規范中并沒有攔截器的概念,它是面向切面編程的一種應用:在需要對方法進行增強的場景下,例如在方法調用前執行一段代碼,或者在方法完成后額外執行一段操作,攔截器的一種實現方式就是動態代理。 把過濾器和攔截器放在一起比較,我覺得是沒有意義的,本質上是不同概念,并沒有可比性,它位于過濾器的下游,是面向 Servlet 方法的。 ### 使用場景 AOP 編程思想面對的是橫向的切面,而非縱向的業務。舉個簡單的例子,每個方法處理過程中,除了業務邏輯外,我們都會有一些相同的操作:參數校驗,日志打印等,雖然這些處理代碼并不多,但是每個方法都要寫這類東西,工作量就不小了。 能否使用程序來統一加入這類操作,而不用程序員自己手寫呢?這就是切面編程思想的應用,利用 Java 的代理,在調用真正的方法之前或者之后,添加一些額外的增強功能。 ## 二、攔截器的實現 以上的過濾器、監聽器都屬于Servlet的api,我們在開發中處理利用以上的進行過濾web請求時,還可以使用Spring提供的攔截器(HandlerInterceptor)進行更加精細的控制。 編寫自定義攔截器類 ~~~ @Slf4j public class CustomHandlerInterceptor implements HandlerInterceptor{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info("preHandle:請求前調用"); //返回 false 則請求中斷 return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { log.info("postHandle:請求后調用"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { log.info("afterCompletion:請求調用完成后回調方法,即在視圖渲染完成后回調"); } } ~~~ 通過繼承WebMvcConfigurerAdapter注冊攔截器。發現WebMvcConfigurerAdapter類已經被廢棄,請實現WebMvcConfigurer接口完成攔截器的注冊。 ~~~ @Configuration //廢棄:public class MyWebMvcConfigurer extends WebMvcConfigurerAdapter{ public class MyWebMvcConfigurer implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { //注冊攔截器 攔截規則 //多個攔截器時 以此添加 執行順序按添加順序 registry.addInterceptor(getHandlerInterceptor()).addPathPatterns("/*"); } @Bean public static HandlerInterceptor getHandlerInterceptor() { return new CustomHandlerInterceptor(); } } ~~~ ![](https://img.kancloud.cn/e1/78/e1788dbbe97f0ad3e21cd14322e34633_1804x355.png) ## 三、請求鏈路說明 ![](https://img.kancloud.cn/15/3c/153c12df10deb5f5520cac6fe5a2a2ca_535x457.png) ![](https://img.kancloud.cn/2b/b9/2bb9b0a019a003960b604c1e879519c3_1391x239.png) ![](https://img.kancloud.cn/0c/3d/0c3d25ba5ebbc47299d6cd543721be46_819x460.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看