亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

SpringMVC攔截器實現原理和登錄實現

2019-11-14 14:56:56
字體:
來源:轉載
供稿:網友

SPRingMVC 攔截器的原理圖

springMVC攔截器的實現一般有兩種方式

     第一種方式是要定義的Interceptor類要實現了Spring的HandlerInterceptor 接口

     第二種方式是繼承實現了HandlerInterceptor接口的類,比如Spring已經提供的實現了HandlerInterceptor接口的抽象類HandlerInterceptorAdapter

 

HandlerInterceptor 接口中定義了三個方法,我們就是通過這三個方法來對用戶的請求進行攔截處理的。

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

     postHandle():這個方法在當前請求進行處理之后,也就是Controller 方法調用之后執行,但是它會在DispatcherServlet 進行視圖返回渲染之前被調用,所以我們可以在這個方法中對Controller 處理之后的ModelAndView 對象進行操作。postHandle 方法被調用的方向跟preHandle 是相反的,也就是說先聲明的Interceptor 的postHandle 方法反而會后執行。

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

下面來看我們的Interceptor類

import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;public class CommonInterceptor  extends HandlerInterceptorAdapter{        private final Logger log = LoggerFactory.getLogger(CommonInterceptor.class);        public  static  final  String  LAST_PAGE = "lastPage";        /**          * 在業務處理器處理請求之前被調用          * 如果返回false          *     從當前的攔截器往回執行所有攔截器的afterCompletion(),再退出攔截器鏈         *              * 如果返回true          *    執行下一個攔截器,直到所有的攔截器都執行完畢          *    再執行被攔截的Controller          *    然后進入攔截器鏈,          *    從最后一個攔截器往回執行所有的postHandle()          *    接著再從最后一個攔截器往回執行所有的afterCompletion()          */          @Override          public boolean preHandle(HttpServletRequest request,                  HttpServletResponse response, Object handler) throws Exception {                        if ("GET".equalsIgnoreCase(request.getMethod())) {                    RequestUtil.saveRequest();            }            log.info("==============執行順序: 1、preHandle================");              String requestUri = request.getRequestURI();            String contextPath = request.getContextPath();            String url = requestUri.substring(contextPath.length());         if ("/userController/login".equals(url)) {                                      return true;            }else {                                   String username =  (String)request.getsession().getAttribute("user");                     if(username == null){                            log.info("Interceptor:跳轉到login頁面!");                            request.getRequestDispatcher("/page/index.jsp").forward(request, response);                            return false;                    }else                            return true;              }                    }                /**         * 在業務處理器處理請求執行完成后,生成視圖之前執行的動作            * 可在modelAndView中加入數據,比如當前時間         */        @Override          public void postHandle(HttpServletRequest request,                  HttpServletResponse response, Object handler,                  ModelAndView modelAndView) throws Exception {               log.info("==============執行順序: 2、postHandle================");              if(modelAndView != null){  //加入當前時間                  modelAndView.addObject("haha", "測試postHandle");              }          }                /**          * 在DispatcherServlet完全處理完請求后被調用,可用于清理資源等             * 當有攔截器拋出異常時,會從當前攔截器往回執行所有的攔截器的afterCompletion()          */          @Override          public void afterCompletion(HttpServletRequest request,                  HttpServletResponse response, Object handler, Exception ex)                  throws Exception {              log.info("==============執行順序: 3、afterCompletion================");          }  }

spring-MVC.xml的相關配置

    <!-- 對靜態資源文件的訪問-->    <!-- <mvc:resources mapping="/images/**"  location="/images/"/>     <mvc:resources mapping="/CSS/**"  location="/css/" />    <mvc:resources mapping="/js/**"  location="/js/" />     <mvc:resources mapping="/favicon.ico"  location="favicon.ico" /> -->     <!--配置攔截器, 多個攔截器,順序執行 -->    <mvc:interceptors>            <mvc:interceptor>                   <!--                         /**的意思是所有文件夾及里面的子文件夾                        /*是所有文件夾,不含子文件夾                        /是web項目的根目錄                     -->                    <mvc:mapping path="/**" />                    <!-- 需排除攔截的地址 -->                     <!--  <mvc:exclude-mapping path="/userController/login"/>  -->                   <bean id="commonInterceptor" class="org.shop.interceptor.CommonInterceptor"></bean> <!--這個類就是我們自定義的Interceptor -->          </mvc:interceptor>           <!-- 當設置多個攔截器時,先按順序調用preHandle方法,然后逆序調用每個攔截器的postHandle和afterCompletion方法  -->    </mvc:interceptors>

就這么簡單SpringMVC攔截器寫好了,登陸的實現用上一篇filter的代碼就可以進行測試了。

注意:在我測試的時候我用<mvc:resources>不攔截靜態資源居然不管用,也不知道是怎么回事,希望有大神指正下應該怎么做

<!-- 對靜態資源文件的訪問-->
<mvc:resources mapping="/images/**" location="/images/"/> <mvc:resources mapping="/css/**" location="/css/" /><mvc:resources mapping="/js/**" location="/js/" /> <mvc:resources mapping="/favicon.ico" location="favicon.ico" />

所以我只好在web.xml進行了對靜態資源不攔截的配置

    <!-- 不攔截靜態文件 -->    <servlet-mapping>        <servlet-name>default</servlet-name>        <url-pattern>/js/*</url-pattern>        <url-pattern>/css/*</url-pattern>        <url-pattern>/images/*</url-pattern>        <url-pattern>/fonts/*</url-pattern>    </servlet-mapping>

 


上一篇:JPA學習(2)注解

下一篇:JAVA--繼承

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久亚洲国产天美传媒修理工| 亚洲午夜未满十八勿入免费观看全集| zzjj国产精品一区二区| 成人av番号网| 一区二区三区高清国产| 国产精品露脸av在线| 国产www精品| 欧美日韩国产丝袜另类| 国内精品一区二区三区四区| 日韩在线视频播放| 亚洲人高潮女人毛茸茸| 国产亚洲精品美女久久久久| 亚洲精品福利资源站| 在线电影中文日韩| 欧美性xxxxxx| 69国产精品成人在线播放| 亚洲另类激情图| 亚洲欧美中文字幕| 欧美国产日韩中文字幕在线| 国产成人精品优优av| 成人午夜在线视频一区| 日韩一级裸体免费视频| 91免费人成网站在线观看18| 俺去亚洲欧洲欧美日韩| 91精品在线国产| 欧美高清电影在线看| 日韩成人在线播放| 亚洲国产日韩欧美在线动漫| 欧美夫妻性生活视频| 另类专区欧美制服同性| 日韩少妇与小伙激情| 欧美亚洲免费电影| 国内精品久久久久影院优| 久久综合亚洲社区| 国产成人欧美在线观看| 久久夜色精品国产| xxav国产精品美女主播| 国产亚洲精品一区二555| 日本一区二区三区四区视频| 成人精品久久一区二区三区| 亚洲人成免费电影| 欧美一级成年大片在线观看| 国产不卡av在线免费观看| 亚洲a∨日韩av高清在线观看| 国产欧美日韩亚洲精品| 成人国产精品色哟哟| 九九热这里只有精品6| 欧美丝袜美女中出在线| 亚洲国产日韩欧美在线动漫| 精品国产一区二区三区久久久| 日韩欧美在线国产| 欧美性猛交丰臀xxxxx网站| 国产日韩av在线播放| 91av视频导航| 日韩小视频在线观看| 狠狠色噜噜狠狠狠狠97| 亚洲网站视频福利| 亚洲欧美在线第一页| 这里只有精品在线观看| 欧美日韩在线影院| 国内精品视频久久| 91久久久在线| 国产精品成人观看视频国产奇米| 欧美限制级电影在线观看| 成人午夜在线视频一区| 91在线色戒在线| 欧美一区二粉嫩精品国产一线天| 日韩av在线最新| 亚洲一区二区三| 亚洲精品视频在线观看视频| 九九九久久久久久| 欧美黄色片在线观看| 久久精品国产96久久久香蕉| 日韩欧美中文免费| 欧美一级黑人aaaaaaa做受| 亚洲第一页中文字幕| 97色在线观看| 国产成人免费av电影| 97成人超碰免| 亚洲一区亚洲二区| 国内精品久久久久久| 日本久久久久久久| 国产国产精品人在线视| 97人洗澡人人免费公开视频碰碰碰| 日韩电视剧免费观看网站| 国产日本欧美一区二区三区| 久久久久久久久国产精品| 欧美日韩亚洲精品内裤| 亚洲免费一在线| 亚洲成av人乱码色午夜| 91久久久久久久久久| 国产91精品黑色丝袜高跟鞋| 国产国语刺激对白av不卡| 国产精品久久国产精品99gif| 国产精品白丝av嫩草影院| 亚洲精品国精品久久99热一| 欧美精品在线看| 亚洲经典中文字幕| 日本精品久久久久影院| 久久久精品国产一区二区| 国产激情视频一区| 国产免费亚洲高清| 国产精品99久久久久久久久| 日韩av电影院| 九九视频这里只有精品| 91沈先生在线观看| 久久精品人人做人人爽| 国产精品第三页| 久久99热这里只有精品国产| 欧美一级大片在线免费观看| 国产69精品久久久久9999| 中文字幕日韩在线视频| 日韩精品在线视频观看| 91久久精品日日躁夜夜躁国产| 日日狠狠久久偷偷四色综合免费| 国模精品视频一区二区三区| 久久久国产精品亚洲一区| 亚洲女同性videos| 欧美日韩精品在线| 国产在线精品成人一区二区三区| 国产成人拍精品视频午夜网站| 成人激情免费在线| 91免费福利视频| 中文一区二区视频| 欧美激情精品久久久久久免费印度| 亚洲人成网站777色婷婷| 好吊成人免视频| 亚洲国产成人久久综合| 日韩精品在线视频| 国产一区深夜福利| 久久视频在线视频| 日韩中文在线不卡| 国产一级揄自揄精品视频| 久久久久久免费精品| 成人精品在线视频| 国产在线a不卡| 青青久久av北条麻妃黑人| 亚洲一区www| 91精品视频专区| 8050国产精品久久久久久| 久久视频免费观看| 亚洲精品综合久久中文字幕| 久久91精品国产91久久跳| 亚洲无av在线中文字幕| 国产日韩视频在线观看| 欧美日韩另类字幕中文| 亚洲天堂成人在线视频| 国产区亚洲区欧美区| 国产精品美女在线| 高清欧美一区二区三区| 欧美日韩中文字幕日韩欧美| 日本一区二三区好的精华液| 日韩av在线直播| 国产精品久久国产精品99gif| 国产精品网站大全| 久久精品视频在线| 欧美日韩亚洲高清| 欧美高清在线视频观看不卡| 欧美成人第一页| 国产亚洲精品久久久久久牛牛| 欧美成人精品三级在线观看| 国产精品男女猛烈高潮激情| 欧美一级高清免费播放| 日韩精品在线私人|