日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringMVC拦截器2(资源和权限管理)(作为补充说明)

發布時間:2025/7/14 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringMVC拦截器2(资源和权限管理)(作为补充说明) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SpringMVC攔截器(資源和權限管理)

1.DispatcherServlet

?? ?SpringMVC具有統一的入口DispatcherServlet,所有的請求都通過DispatcherServlet。
?? ?DispatcherServlet是前置控制器,配置在web.xml文件中的。攔截匹配的請求,Servlet攔截匹配規則要自已定義,把攔截下來的請求,依據某某規則分發到目標Controller來處理。? 所以我們現在web.xml中加入以下配置:

[html]?view plaincopy print?
  • <!--?初始化?DispatcherServlet時,該框架在?web應用程序WEB-INF目錄中尋找一個名為[servlet-名稱]-servlet.xml的文件,??
  • ?????????并在那里定義相關的Beans,重寫在全局中定義的任何Beans?-->??
  • ???<servlet>??
  • ?????<servlet-name>springMybatis</servlet-name>??
  • ?????<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>??
  • ?????<load-on-startup>1</load-on-startup>??
  • ???</servlet>??
  • ???<servlet-mapping>??
  • ?????<servlet-name>springMybatis</servlet-name>??
  • ?????<!--?所有的的請求,都會被DispatcherServlet處理?-->??
  • ?????<url-pattern>/</url-pattern>??
  • ???</servlet-mapping>??
  • ?

    2.靜態資源不攔截

    ?????? 如果只配置攔截類似于*.do格式的url,則對靜態資源的訪問是沒有問題的,但是如果配置攔截了所有的請求(如我們上面配置的“/”),就會造成js文件、css文件、圖片文件等靜態資源無法訪問。
    ????? 一般實現攔截器主要是為了權限管理,主要是攔截一些url請求,所以不對靜態資源進行攔截。要過濾掉靜態資源一般有兩種方式,
    ??????第一種是采用<mvc:default-servlet-handler />,(一般Web應用服務器默認的Servlet名稱是"default",所以這里我們激活Tomcat的defaultServlet來處理靜態文件,在web.xml里配置如下代碼即可:)

    [html]?view plaincopy print?
  • <!-- 該servlet為tomcat,jetty等容器提供,將靜態資源映射從/改為/static/目錄,如原來訪問 http://localhost/foo.css ,現在http://localhost/static/foo.css -->??
  • <!--?不攔截靜態文件?-->??
  • <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>??

  • ?? ???? Tomcat, Jetty, JBoss, and GlassFish? 默認 Servlet的名字 -- "default"
    ?? ??? ?Resin 默認 Servlet的名字 -- "resin-file"
    ?? ??? ?WebLogic 默認 Servlet的名字? -- "FileServlet"
    ?? ??? ?WebSphere? 默認 Servlet的名字 -- "SimpleFileServlet"
    ?? ??? ?
    ?? ??? 如果你所有的Web應用服務器的默認Servlet名稱不是"default",則需要通過default-servlet-name屬性顯示指定:

    [html]?view plaincopy print?
  • <mvc:default-servlet-handler?default-servlet-name="所使用的Web服務器默認使用的Servlet名稱"?/>??

  • ?? ?? 第二種是采用<mvc:resources />,在springmvc的配置文件中加入以下代碼:

    [html]?view plaincopy print?
  • <mvc:resources?mapping="/js/**"?location="/static_resources/javascript/"/>????
  • <mvc:resources?mapping="/styles/**"?location="/static_resources/css/"/>????
  • <mvc:resources?mapping="/images/**"?location="/static_resources/images/"/>??
  • ?

    3.自定義攔截器

    ?? ?SpringMVC的攔截器HandlerInterceptorAdapter對應提供了三個preHandle,postHandle,afterCompletion方法。preHandle在業務處理器處理請求之前被調用,
    ?? ?postHandle在業務處理器處理請求執行完成后,生成視圖之前執行,afterCompletion在DispatcherServlet完全處理完請求后被調用,可用于清理資源等 。所以要想實現自己的權限管理邏輯,需要繼承HandlerInterceptorAdapter并重寫其三個方法。
    ?? ?首先在springmvc.xml中加入自己定義的攔截器我的實現邏輯CommonInterceptor,

    [html]?view plaincopy print?
  • <!--配置攔截器,?多個攔截器,順序執行?-->??
  • <mvc:interceptors>????
  • ????<mvc:interceptor>????
  • ????????<!--?匹配的是url路徑,?如果不配置或/**,將攔截所有的Controller?-->??
  • ????????<mvc:mapping?path="/"?/>??
  • ????????<mvc:mapping?path="/user/**"?/>??
  • ????????<mvc:mapping?path="/test/**"?/>??
  • ????????<bean?class="com.alibaba.interceptor.CommonInterceptor"></bean>????
  • ????</mvc:interceptor>??
  • ????<!--?當設置多個攔截器時,先按順序調用preHandle方法,然后逆序調用每個攔截器的postHandle和afterCompletion方法?-->??
  • </mvc:interceptors>??


  • ?? ?我的攔截邏輯是“在未登錄前,任何訪問url都跳轉到login頁面;登錄成功后跳轉至先前的url”,具體代碼如下:

    [java]?view plaincopy print?
  • /**?
  • ?*??
  • ?*/??
  • package?com.alibaba.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;??
  • ??
  • import?com.alibaba.util.RequestUtil;??
  • ??
  • ??
  • /**?
  • ?*?@author?tfj?
  • ?*?2014-8-1?
  • ?*/??
  • public?class?CommonInterceptor?extends?HandlerInterceptorAdapter{??
  • ????private?final?Logger?log?=?LoggerFactory.getLogger(CommonInterceptor.class);??
  • ????public?static?final?String?LAST_PAGE?=?"com.alibaba.lastPage";??
  • ????/*?
  • ?????*?利用正則映射到需要攔截的路徑?????
  • ??????
  • ????private?String?mappingURL;?
  • ?????
  • ????public?void?setMappingURL(String?mappingURL)?{?????
  • ???????????????this.mappingURL?=?mappingURL;?????
  • ????}????
  • ??*/??
  • ????/**??
  • ?????*?在業務處理器處理請求之前被調用??
  • ?????*?如果返回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());??
  • ????????
  • ????????log.info("requestUri:"+requestUri);????
  • ????????log.info("contextPath:"+contextPath);????
  • ????????log.info("url:"+url);????
  • ??????????
  • ????????String?username?=??(String)request.getSession().getAttribute("user");???
  • ????????if(username?==?null){??
  • ????????????log.info("Interceptor:跳轉到login頁面!");??
  • ????????????request.getRequestDispatcher("/WEB-INF/jsp/login.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("var",?"測試postHandle");????
  • ????????}????
  • ????}????
  • ????
  • ????/**??
  • ?????*?在DispatcherServlet完全處理完請求后被調用,可用于清理資源等???
  • ?????*???
  • ?????*?當有攔截器拋出異常時,會從當前攔截器往回執行所有的攔截器的afterCompletion()??
  • ?????*/????
  • ????@Override????
  • ????public?void?afterCompletion(HttpServletRequest?request,????
  • ????????????HttpServletResponse?response,?Object?handler,?Exception?ex)????
  • ????????????throws?Exception?{????
  • ????????log.info("==============執行順序:?3、afterCompletion================");????
  • ????}????
  • ??
  • }????
  • ?

    ??? 注:上述代碼里我寫了一個RequestUtil,主要實現獲取當前Request、Session對象,保存和加密頁面,取出等功能。

    至此,攔截器已經實現了,效果如圖:

    我直接訪問/test/hello,會被攔截

    登錄成功后會跳轉至/test/hello對應的頁面

    轉載于:https://www.cnblogs.com/handsome1013/p/5462493.html

    總結

    以上是生活随笔為你收集整理的SpringMVC拦截器2(资源和权限管理)(作为补充说明)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产精品第8页 | 九九爱爱视频 | 亚洲国产精品女人 | 一区三区在线 | 极品美女一区二区三区 | 国产人成 | 国产乱码精品一区二区 | 亚洲射情 | 国产亚洲第一页 | 亚洲一区二区三区蜜桃 | 自拍偷拍福利视频 | 欧美黑人精品一区二区 | 99re在线视频观看 | 青青草原伊人网 | 老太太av | 国产精品毛片 | 97久久久久 | 少妇又紧又爽视频 | a级免费视频 | 黄色大片视频 | 日韩福利视频导航 | 亚洲一级片免费 | 大乳护士喂奶hd | 91成人精品国产刺激国语对白 | 欧美一级淫片免费视频黄 | 女同在线视频 | 国产看片网站 | 蜜桃av噜噜 | 欧美一区二区三区在线视频 | 欧美性www| 成人音影 | 水蜜桃亚洲精品 | www国产www| 日韩视频在线观看免费 | 亚洲精品aⅴ | 亚洲无吗av | 美女日批视频在线观看 | 黑人玩弄人妻一区二区三区影院 | www.97超碰| 亚洲天堂伊人网 | 久久久久久91 | 国产男女猛烈无遮挡a片漫画 | 亚洲射图 | 黄色av影院| 日批av | 精品人妻伦一二三区免费 | 白石茉莉奈黑人 | 91香蕉在线视频 | 爱爱短视频 | 国模无码国产精品视频 | 久久久一二三 | 天天干夜操 | 久久精品国产亚洲7777 | www.777奇米| 精品国产免费无码久久久 | 欧美人与物videos另类 | 91操视频| 国产美女明星三级做爰 | 爱爱视频欧美 | 天堂8av| 69成人免费视频 | 青青青视频免费 | 午夜久久福利 | 一区二区免费在线观看 | 久久精品福利视频 | 日本黄网免费 | 黄色91视频| 免费日韩一级片 | 小婕子伦流澡到高潮h | 久久国产精品久久精品国产 | 久久久久久午夜 | 黄网站免费在线观看 | 欧美性受xxx | 久久大伊人 | 91成人毛片 | 国产制服av | 秋霞视频一区二区 | 久久精品4| 久久久欧洲| 精品亚洲一区二区 | 久久久久免费视频 | 在线播放亚洲 | 人人妻人人澡人人爽精品欧美一区 | 久久久精品视频在线观看 | 日本精品一区二区三区在线观看 | 国产-第1页-浮力影院 | 毛片在线播放视频 | 国产 日韩 欧美 成人 | 婷婷伊人五月 | 国产永久在线 | www天堂在线 | 五月天在线播放 | 午夜视频在线观看免费视频 | 久久澡 | 天天弄天天操 | 123超碰 | 久久密 | 欧美激情欧美激情在线五月 | 精品毛片一区二区三区 |