1. 程式人生 > >Spring MVC 攔截器配置及使用(包括靜態資源的處理)

Spring MVC 攔截器配置及使用(包括靜態資源的處理)

springmvc攔截器能夠對請求的資源路徑進行攔截,極大的簡化了攔截器的書寫。但是,千萬千萬要注意一點:靜態資源的放行。

關於靜態資源的放行,主要有三種方式:

1、修改請求的url地址。

 如果請求的url地址都是以*.do結尾,那麼攔截器中的配置可以變為攔截以do結尾的資源,靜態資源自然就不會被攔截到了;


2、在自定義攔截器中對資源進行判斷,如果滿足需要排除的資源,就進行放行。

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

這種方式我試了下,啟動時報沒有alowUrl屬性。這個可能需要另外定義還是怎麼弄?有待考證

3.在攔截器中設定不攔截的屬性: 

 //建立session  
        HttpSession session =request.getSession();  
          
        //無需登入,允許訪問的地址  
        String[] allowUrls =new String[]{"/welcome","/userlogin","/js","/css","/images","/image"};  
              
        //獲取請求地址  
        String url =request.getRequestURL().toString();  
          
        //獲得session中的使用者  
        String userName = (String)session.getAttribute("USER_NAME");  
      
          
        for (String strUrl : allowUrls) {  
            if(url.contains(strUrl))  
            {  
                return true;  
            }  
        }  
          
        if(StringUtils.isEmpty(userName))  
        {  
            throw new UnLoginException("您尚未登入!");     
                                  
        }  

    試過了,是可以的。

3.設定web.xml中的預設攔截器,不攔截靜態資源

在springmvc的Dispatcher中配置<mvc:default-servlet-handler />(一般Web應用伺服器預設的Servlet名稱是"default",所以這裡我們啟用Tomcat的defaultServlet來處理靜態檔案,在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>