麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > Java > 正文

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

2024-07-14 08:41:50
字體:
供稿:網(wǎng)友

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

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

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

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

例:

@Componentpublic 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(); }}

總結(jié)

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


注:相關(guān)教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: av电影院在线观看 | 欧美特黄a | sese在线视频 | 羞羞视频免费视频欧美 | 久久久一区二区三区精品 | 粉嫩蜜桃麻豆免费大片 | 中国免费一级毛片 | 国产精品久久国产精麻豆96堂 | 欧美一级免费视频 | 撅高 自己扒开 调教 | 在线观看免费视频麻豆 | 7777网站| 在线播放免费播放av片 | 少妇的肉体k8经典 | 国产成人小视频在线观看 | 色婷婷久久久久久 | 久久精品国产99国产精品亚洲 | 色妇视频 | 国产一级毛片在线看 | 亚洲精品在线观看免费 | 黄色av片在线观看 | 在线日韩亚洲 | 日本视频在线免费观看 | chengrenzaixian | 韩国精品一区二区三区四区五区 | 久草热久草视频 | 久久久久一区二区三区四区五区 | 久久久在线免费观看 | 午夜男人免费视频 | 日本xxxx色视频在线观看免费, | 91资源在线观看 | 免费黄色小网站 | 亚洲码无人客一区二区三区 | 免费嗨片首页中文字幕 | 色av成人天堂桃色av | 黄色视频a级毛片 | 国产手机av在线 | 久久精品国产99国产精品澳门 | 国产精品毛片无码 | 免费看性xxx高清视频自由 | 精品一区二区免费 |