<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Spring 攔截器 > 原文: [https://javatutorial.net/interceptors-in-spring](https://javatutorial.net/interceptors-in-spring) 顧名思義,在 Spring,攔截器攔截我們通過實現`HandlerInterceptor`接口來請求。 它為我們提供了一些方法,使我們能夠攔截控制器類正在處理的傳入請求或控制器類已經處理的響應。 ![java-featured-image](https://img.kancloud.cn/05/3e/053ee0bb59842d92359246c98f815e0c_780x330.jpg) 接口提供給我們的方法有: 1. `preHandle()` – 返回`true`或`false`。 如果返回`true`,則處理程序執行鏈繼續,否則停止。 2. `postHandle()` – 處理程序執行后調用。 3. `afterCompletion()` – 在請求完成并生成視圖之后調用。 ### `HandlerInterceptor`與`HandlerInterceptorAdapter` 首先,我說過我們需要實現`HandlerInterceptor`接口,但是我們也可以實現`HandlerInterceptorAdapter`。 它們之間有 1 個區別,就是`HandlerInterceptor`我們必須覆蓋我上面提到的所有三種方法,而`HandlerInterceptorAdapter`允許我們僅覆蓋所需的方法。 ### 代碼實現 通常,這 3 種方法的工作流程會引發`Exception`或返回`true`。 ```java @Component public class EmployeeInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception { // Basic validation of password and username String username = request.getParameter("username"); String password = request.getParameter("password"); if(StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) { // throw the exception throw new Exception("Empty username or password."); } // if no exception has been thrown, return true return true; } @Override public boolean postHandle(HttpServletRequest request, HttpServletResponse response,Object handler, ModelAndView modelAndView) throws Exception { log.info(request); return true; } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exc) throws Exception { if (exc != null) exc.printStackTrace(); else log.info("Request: " + request + " / Exception: " + exc); } } ``` 讓我們分解上面的代碼示例。 首先我們創建我們的類并實現`HandlerInterceptor`,因為它會覆蓋所有三個方法。 按照慣例,類名必須在初始名稱之后具有`Interceptor`。 然后,我們重寫`preHandle()`方法。 它包含 3 個參數 - 請求,響應和處理程序,并且不要忘記`throws Exception`。 ### `preHandle()` 我的`preHandle()`方法非常簡單–它從請求中獲取用戶名和密碼,然后檢查它們是否為空以及是否為空,然后拋出異常,指出“空用戶名或密碼”。 如果它們不為空,則返回`true`。 在正常環境中,您當然會做更多的驗證,但是為了簡單起見,我這樣做了。 ### `postHandle()` 如果沒有引發異常并記錄請求,我的`postHandle()`方法從返回`true`不會起到什么作用。 它包含 4 個參數 - 請求,響應,處理程序和`modelAndView`。 它還`throws Exception`。通常,此方法用于修改`ModelAndView`(通常通過添加其他屬性)或簡單地確定處理程序方法處理客戶請求所花費的時間。 ### `afterCompletion()` 我的`afterCompletion()`方法記錄了請求和異常,但是在此之前,它通過說`exc != null`來檢查是否有異常,如果存在,那么我們說`exc.printStackTrace()`。 ### 配置 我們的攔截器尚未添加到 Spring 配置中。 要添加它,我們必須實現一個自定義`@Configuration`文件,該文件擴展了`WebMvcConfigurerAdapter`,該文件在`addInterceptors`方法內添加了攔截器。 ```java @Configuration public class AppConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new EmployeeInterceptor()).addPathPatterns("/account/signin/process"); } } ``` 另外,請記住,您必須在`addInterceptors`方法中指定適當的路徑模式。
                  <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>

                              哎呀哎呀视频在线观看