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
>