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

詳解springmvc攔截器攔截靜態(tài)資源

 更新時(shí)間:2017年01月20日 16:13:24   作者:wei906  
本篇文章主要介紹了詳解springmvc攔截器攔截靜態(tài)資源,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。

springmvc攔截器interceptors

springmvc攔截器能夠?qū)φ?qǐng)求的資源路徑進(jìn)行攔截,極大的簡(jiǎn)化了攔截器的書(shū)寫(xiě)。但是,千萬(wàn)千萬(wàn)要注意一點(diǎn):靜態(tài)資源的放行。

上代碼:

<mvc:resources mapping="/resources/**" location="/static/resources" /> 
  <mvc:resources mapping="/static/css/**" location="/static/css/" /> 
  <mvc:resources mapping="/static/images/**" location="/static/images/" /> 
  <mvc:resources mapping="/static/js/**" location="/static/js/" /> 
<mvc:interceptors> 
    <!-- 使用bean定義一個(gè)Interceptor,直接定義在mvc:interceptors根下面的Interceptor將攔截所有的請(qǐng)求  
    <bean class="com.myTree.interceptor.LoginInterceptor" />--> 
    <mvc:interceptor> 
      <mvc:mapping path="/**" /> 
      <!-- 需排除攔截的地址 -->  
      <mvc:exclude-mapping path="/Login"/>  
      <mvc:exclude-mapping path="/login"/>  
      <mvc:exclude-mapping path="/sattic/**"/>  
      <!-- 定義在mvc:interceptor下面的表示是對(duì)特定的請(qǐng)求才進(jìn)行攔截的 --> 
      <beans:bean class="com.myTree.interceptor.LoginInterceptor" > 
      </beans:bean> 
    </mvc:interceptor> 
  </mvc:interceptors> 

問(wèn)題來(lái)了,在請(qǐng)求jsp頁(yè)面的時(shí)候,你的靜態(tài)資源的訪問(wèn)仍然會(huì)被自定義攔截器攔截,這會(huì)導(dǎo)致程序運(yùn)行的效率大大下降,還會(huì)不停的跳轉(zhuǎn)到攔截器的邏輯。主要原因是

<mvc:mapping path="/**" /> 

會(huì)對(duì)所有的請(qǐng)求資源進(jìn)行攔截,雖然靜態(tài)資源已經(jīng)排除了,但還是會(huì)被攔截到。

如何解決這個(gè)bug呢?

主要有三種方式:

1、修改請(qǐng)求的url地址。

 如果請(qǐng)求的url地址都是以*.do結(jié)尾,那么攔截器中的配置可以變?yōu)閿r截以do結(jié)尾的資源,靜態(tài)資源自然就不會(huì)被攔截到了;
2、在自定義攔截器中對(duì)資源進(jìn)行判斷,如果滿(mǎn)足需要排除的資源,就進(jìn)行放行。

<!-- 攔截器配置 -->  
  <mvc:interceptors>  
   <!-- session超時(shí) -->  
   <mvc:interceptor>  
    <mvc:mapping path="/*/*"/>  
    <bean class="com.myTree.interceptor.LoginInterceptor">  
     <property name="allowUrls">  
      <list>  
       <!-- 如果請(qǐng)求中包含以下路徑,則不進(jìn)行攔截 -->  
       <value>/login</value>  
       <value>/js</value>  
       <value>/css</value>  
       <value>/image</value>  
       <value>/images</value>  
      </list>  
     </property>  
    </bean>  
   </mvc:interceptor>  
  </mvc:interceptors>  

在攔截器中設(shè)定不攔截的屬性: 

/** 
 * 處理登錄攔截器 
 */  
public class LoginInterceptor implements HandlerInterceptor{  
    
  public String[] allowUrls;//還沒(méi)發(fā)現(xiàn)可以直接配置不攔截的資源,所以在代碼里面來(lái)排除  
    
  public void setAllowUrls(String[] allowUrls) {  
    this.allowUrls = allowUrls;  
  }  
  
  @Override  
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response,  
      Object handler) throws Exception {<pre name="code" class="java"> <span style="white-space:pre"> </span>String requestUrl = request.getRequestURI().replace(request.getContextPath(), "");   
    System.out.println(requestUrl);  
    if(null != allowUrls && allowUrls.length>=1){  
      for(String url : allowUrls) {   
        if(requestUrl.contains(url)) {   
          return true;   
        }   
      } 
} 

3、設(shè)置web.xml中的默認(rèn)攔截器,不攔截靜態(tài)資源

在springmvc的Dispatcher中配置<mvc:default-servlet-handler />(一般Web應(yīng)用服務(wù)器默認(rèn)的Servlet名稱(chēng)是"default",所以這里我們激活Tomcat的defaultServlet來(lái)處理靜態(tài)文件,在web.xml里配置如下代碼即可:)

<!--該servlet為tomcat,jetty等容器提供,將靜態(tài)資源映射從/改為/static/目錄,如原來(lái)訪問(wèn)http://localhost/foo.css,現(xiàn)在http://localhost/static/foo.css -->  
<!-- 不攔截靜態(tài)文件 -->  
<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>  

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java集合框架之Collection接口詳解

    Java集合框架之Collection接口詳解

    這篇文章主要為大家詳細(xì)介紹了Java集合框架之Collection接口,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • SpringBoot向容器注冊(cè)bean的方法詳解

    SpringBoot向容器注冊(cè)bean的方法詳解

    這篇文章主要利用示例為大家詳細(xì)介紹了SpringBoot如何向容器注冊(cè)bean(即:將對(duì)象加入容器)的四種方法,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-05-05
  • 詳解通過(guò)JDBC進(jìn)行簡(jiǎn)單的增刪改查(以MySQL為例)

    詳解通過(guò)JDBC進(jìn)行簡(jiǎn)單的增刪改查(以MySQL為例)

    JDBC是用于執(zhí)行SQL語(yǔ)句的一類(lèi)Java API,通過(guò)JDBC使得我們可以直接使用Java編程來(lái)對(duì)關(guān)系數(shù)據(jù)庫(kù)進(jìn)行操作。通過(guò)封裝,可以使開(kāi)發(fā)人員使用純Java API完成SQL的執(zhí)行。
    2017-01-01
  • 詳解Java數(shù)組的四種拷貝方式

    詳解Java數(shù)組的四種拷貝方式

    Java數(shù)組一共有四種拷貝方式: for循環(huán)、copyof/copyOfRange、arraycopy和clone。本文將為大家詳細(xì)介紹一下這四種方式,感興趣的可以了解一下
    2022-02-02
  • 深入理解Java編程線程池的實(shí)現(xiàn)原理

    深入理解Java編程線程池的實(shí)現(xiàn)原理

    這篇文章主要介紹了深入理解Java編程線程池的實(shí)現(xiàn)原理,涉及ThreadPoolExecutor類(lèi),線程池實(shí)現(xiàn)原理及示例等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • 關(guān)于Mybatis中SQL節(jié)點(diǎn)的深入解析

    關(guān)于Mybatis中SQL節(jié)點(diǎn)的深入解析

    這篇文章主要給大家介紹了關(guān)于Mybatis中SQL節(jié)點(diǎn)的深入解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Spring-Security對(duì)HTTP相應(yīng)頭的安全支持方式

    Spring-Security對(duì)HTTP相應(yīng)頭的安全支持方式

    這篇文章主要介紹了Spring-Security對(duì)HTTP相應(yīng)頭的安全支持方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Lambda表達(dá)式和Java集合框架

    Lambda表達(dá)式和Java集合框架

    本文主要介紹了Lambda表達(dá)式和Java集合框架的相關(guān)知識(shí),具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • Java 十進(jìn)制轉(zhuǎn)二、八、十六進(jìn)制的字符串

    Java 十進(jìn)制轉(zhuǎn)二、八、十六進(jìn)制的字符串

    本文主要介紹了十進(jìn)制轉(zhuǎn)二進(jìn)制;十進(jìn)制轉(zhuǎn)八進(jìn)制;十進(jìn)制轉(zhuǎn)十六進(jìn)制的方法,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • java和jsp之間的request傳值方法

    java和jsp之間的request傳值方法

    這篇文章主要給大家介紹了關(guān)于java和jsp之間的request傳值方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評(píng)論