欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springmvc攔截器執(zhí)行順序及各方法作用詳解

 更新時間:2018年07月26日 08:38:38   作者:開拖拉機的蠟筆小新  
這篇文章主要介紹了Springmvc的攔截器執(zhí)行順序及各方法作用,下面講實現其接口的寫法,先看一下這個接口的三個方法,需要的朋友可以參考下

實現HandlerInterceptor接口或者繼承HandlerInterceptor的子類,比如Spring 已經提供的實現了HandlerInterceptor 接口的抽象類HandlerInterceptorAdapter ,下面講實現其接口的寫法,先看一下這個接口的三個方法.

- 方法preHandle: 顧名思義,該方法將在請求處理之前進行調用,在controller之前執(zhí)行。SpringMVC 中的Interceptor 是鏈式的調用的,在一個應用中或者說是在一個請求中可以同時存在多個Interceptor 。每個Interceptor 的調用會依據它的聲明順序依次執(zhí)行,而且最先執(zhí)行的都是Interceptor 中的preHandle 方法,所以可以在這個方法中進行一些前置初始化操作或者是對當前請求的一個預處理,比如說獲取cookie的值或者判斷是否已經登錄,也可以在這個方法中進行一些判斷來決定請求是否要繼續(xù)進行下去。該方法的返回值是布爾值Boolean 類型的,當它返回為false 時,表示請求結束,后續(xù)的Interceptor 和Controller 都不會再執(zhí)行;當返回值為true 時就會繼續(xù)調用下一個Interceptor 的preHandle 方法,如果已經是最后一個Interceptor 的時候就會是調用當前請求的Controller 方法。

- 方法postHandle:由preHandle 方法的解釋我們知道這個方法包括后面要說到的afterCompletion 方法都只能是在當前所屬的Interceptor 的preHandle 方法的返回值為true 時才能被調用。postHandle 方法,顧名思義就是在當前請求進行處理之后,也就是Controller 方法調用之后執(zhí)行,但是它會在DispatcherServlet 進行視圖返回渲染之前被調用,所以我們可以在這個方法中對Controller 處理之后的ModelAndView 對象進行操作,比如說設置cookie,返回給前端。postHandle 方法被調用的方向跟preHandle 是相反的,也就是說先聲明的Interceptor 的postHandle 方法反而會后執(zhí)行

- 方法afterCompletion:該方法也是需要當前對應的Interceptor 的preHandle 方法的返回值為true 時才會執(zhí)行。顧名思義,該方法將在整個請求結束之后,也就是在DispatcherServlet 渲染了對應的視圖之后執(zhí)行。這個方法的主要作用是用于進行資源清理工作的。

例:

@Component
public class AuthInterceptor implements HandlerInterceptor {
 private static final String TOKEN_COOKIE = "token";
 @Autowired
 private UserDao userDao;
 @Override
 public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler)
     throws Exception {
  Map<String, String[]> map = req.getParameterMap();
  map.forEach((k,v) ->req.setAttribute(k, Joiner.on(",").join(v)));
  String requestURI = req.getRequestURI();
  if (requestURI.startsWith("/static") || requestURI.startsWith("/error")) {
   return true;
  }
  Cookie cookie = WebUtils.getCookie(req, TOKEN_COOKIE);
  if (cookie != null && StringUtils.isNoneBlank(cookie.getValue())) {
    User user = userDao.getUserByToken(cookie.getValue());
    if (user != null) {
     req.setAttribute(CommonConstants.LOGIN_USER_ATTRIBUTE, user);
     UserContext.setUser(user);
    }
  }
  return true;
 }
 @Override
 public void postHandle(HttpServletRequest req, HttpServletResponse res, Object handler,
     ModelAndView modelAndView) throws Exception {
  String requestURI = req.getRequestURI();
  if (requestURI.startsWith("/static") || requestURI.startsWith("/error")) {
   return ;
  }
  User user = UserContext.getUser();
  if (user != null && StringUtils.isNoneBlank(user.getToken())) {
    String token = requestURI.startsWith("logout")? "" : user.getToken();
    Cookie cookie = new Cookie(TOKEN_COOKIE, token);
    cookie.setPath("/");
    cookie.setHttpOnly(false);
    res.addCookie(cookie);
  }
 }
 @Override
 public void afterCompletion(HttpServletRequest req, HttpServletResponse response, Object handler, Exception ex)
     throws Exception {
  UserContext.remove();
 }
}

總結

以上所述是小編給大家介紹的Springmvc攔截器執(zhí)行順序及各方法作用詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

相關文章

  • Spring Boot中如何使用Convert接口實現類型轉換器

    Spring Boot中如何使用Convert接口實現類型轉換器

    這篇文章主要介紹了Spring Boot中使用Convert接口實現類型轉換器的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 利用Java反射機制實現對象相同字段的復制操作

    利用Java反射機制實現對象相同字段的復制操作

    這篇文章主要介紹了利用Java反射機制實現對象相同字段的復制操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • SpringBoot配置SwaggerUI訪問404錯誤的解決方法

    SpringBoot配置SwaggerUI訪問404錯誤的解決方法

    這篇文章主要為大家詳細介紹了SpringBoot配置SwaggerUI訪問404錯誤的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • SpringCloud超詳細講解微服務網關Gateway

    SpringCloud超詳細講解微服務網關Gateway

    這篇文章主要介紹了SpringCloud Gateway微服務網關,負載均衡,熔斷和限流,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • java利用url實現網頁內容的抓取

    java利用url實現網頁內容的抓取

    本文主要介紹了java利用url實現網頁內容抓取的示例。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • Java 爬蟲如何爬取需要登錄的網站

    Java 爬蟲如何爬取需要登錄的網站

    這篇文章主要介紹了Java 爬蟲如何爬取需要登錄的網站,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • 并發(fā)編程之Java內存模型volatile的內存語義

    并發(fā)編程之Java內存模型volatile的內存語義

    這篇文章主要介紹了并發(fā)編程之Java內存模型volatile的內存語義,理解volatile特性的一個好辦法是把對volatile變量的單個讀/寫,看成是使用同一個鎖對單個讀/寫操作做了同步。下面我們一起進入文章看看具體例子吧,需要的小伙伴可以參考下
    2021-11-11
  • Eclipse引用XSD實現XML配置文件提示標簽的方法

    Eclipse引用XSD實現XML配置文件提示標簽的方法

    今天小編就為大家分享一篇關于Eclipse引用XSD實現XML配置文件提示標簽的方法,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Spring Gateway基本使用示例小結

    Spring Gateway基本使用示例小結

    Springcloud Gateway使用了Webflux中的reactor-netty響應式編程組件,底層使用了Netty通訊框架,具體一些特征,本文結合實例代碼對Spring Gateway使用給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2023-11-11
  • IDEA打包maven多模塊相互依賴項目全過程

    IDEA打包maven多模塊相互依賴項目全過程

    這篇文章主要介紹了IDEA打包maven多模塊相互依賴項目全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評論