詳解SpringMVC中設(shè)置靜態(tài)資源不被攔截的問題
這兩天使用SpringMVC來做登錄,注冊(cè)的小demo,其中用到了springmvc攔截器對(duì)登錄操作進(jìn)行攔截處理,并對(duì)url進(jìn)行驗(yàn)證。驗(yàn)證通過則可以進(jìn)行handler的處理,如果驗(yàn)證不通過直接跳回或者重定向到指定的頁面。
但是在做這個(gè)操作的時(shí)候,遇到很大的一個(gè)問題就是項(xiàng)目demo中的靜態(tài)資源都會(huì)在每次請(qǐng)求中被攔截處理了!跳回頁面的時(shí)候,頁面就不再是想想中的呈現(xiàn)的樣子了。
以為我在springmvc.xml中已經(jīng)配置了攔截器和靜態(tài)資源的配置卻還是出現(xiàn)這樣的結(jié)果,所以就又是看前段瀏覽器的設(shè)置,又是看css文件,js文件。最后才鎖定目標(biāo)是靜態(tài)資源的問題,直接在web.xml中使用defaultServlet的方式才解決問題。
下面是我的攔截器代碼:
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
String url=request.getRequestURI();
System.out.println(url);
String method=request.getMethod();
//判斷是否在做登錄操作
if(url.indexOf("/login")>=0&&method.equalsIgnoreCase("post")){
return true;
}
//判斷是否在做注冊(cè)操作
if(url.indexOf("/toAddUserPage")>=0){
return true;
}
//如果時(shí)登錄用戶則可以進(jìn)行下一步操作 返回true
HttpSession session=request.getSession();
User user=(User) session.getAttribute("user");
if(user!=null){
//登錄之后不能使用登錄操作和注冊(cè)操作
if(url.indexOf("/toLogin")>=0||url.indexOf("/toAddUserPage")>=0){
request.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(request, response);
return false;
}
return true;
}
//其他操作直接返回到登錄頁面
request.getRequestDispatcher("/WEB-INF/jsp/user/login.jsp").forward(request, response);
return false;
}
下面是我的springmvc的配置:
<!-- 可以掃描controller、service、這里讓掃描controller,指定controller的包 --> <context:component-scan base-package="com.ipro.shopping.controller"/> <!-- 使用 注解驅(qū)動(dòng)可以加載處理器適配器和處理器映射以及json解釋器不用單獨(dú)再添加處理器適配器和核處理器映射的配置 --> <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven> <!-- 靜態(tài)資源解析包括 :js、css、img、 --> <!-- <MVC:RESOURCES LOCATION="/" MAPPING="**.HTML"/> <MVC:RESOURCES LOCATION="/" MAPPING="**.JS"/> <MVC:RESOURCES LOCATION="/" MAPPING="**.CSS"/> <MVC:RESOURCES LOCATION="/" MAPPING="**.PNG"/> <MVC:RESOURCES LOCATION="/" MAPPING="**.GIF"/> <MVC:RESOURCES LOCATION="/" MAPPING="**.JPG"/> --> <!-- 配置攔截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.ipro.shopping.interceptor.LoginInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
我把所有的靜態(tài)資源都設(shè)置成怎樣的形式,可結(jié)果還是無法返回正確的答案。
下面是配置web.xml之后的文件:
<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.gif</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.png</url-pattern> </servlet-mapping> <!-- springmvc前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- contextConfigLocation配置springmvc加載的配置文件 (配置處理器映射器、適配器等等) 如果不配置contextConfigLocation, 默認(rèn)加載的是/WEB-INF/servlet名稱-serlvet.xml(springmvc-servlet.xml) --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet>
注意的是我們配置defaultServlet一定要配置到springmvc的前端控制器(DispatcherServlet)前面才會(huì)生效。
上面是我在做登錄驗(yàn)證的時(shí)候用到的,僅供參考。目前這個(gè)問題只做了一種方案,網(wǎng)上說的有三種可以解決的方案,第一種就是我上面提到的這種
第二種就是在springmvc中配置的方式,只不過我配置的沒有成功。另外一種就是也是使用defaultServlet使用注解的方式配置。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springboot3請(qǐng)求參數(shù)種類及接口測(cè)試案例小結(jié)
這篇文章主要介紹了springboot3請(qǐng)求參數(shù)種類及接口測(cè)試案例小結(jié),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-10-10
SpringBoot+Mybatis-plus+shardingsphere實(shí)現(xiàn)分庫分表的方案
實(shí)現(xiàn)億級(jí)數(shù)據(jù)量分庫分表的項(xiàng)目是一個(gè)挑戰(zhàn)性很高的任務(wù),下面是一個(gè)基于Spring Boot的簡(jiǎn)單實(shí)現(xiàn)方案,感興趣的朋友一起看看吧2024-03-03
SpringBoot3實(shí)現(xiàn)優(yōu)雅停機(jī)的完整流程
在現(xiàn)代微服務(wù)架構(gòu)中,優(yōu)雅停機(jī)(Graceful Shutdown)是一項(xiàng)重要功能,可以確保服務(wù)在關(guān)閉時(shí)處理完所有當(dāng)前請(qǐng)求,避免突然終止連接或丟失數(shù)據(jù),Spring Boot 3 提供了對(duì)優(yōu)雅停機(jī)的內(nèi)置支持,本文給大家介紹了SpringBoot3怎樣優(yōu)雅停機(jī),需要的朋友可以參考下2024-10-10
Java中使用While語句自增運(yùn)算遍歷數(shù)組典型實(shí)例
這篇文章主要介紹了Java中使用While語句自增運(yùn)算遍歷數(shù)組典型實(shí)例,本文直接給出實(shí)例代碼,并對(duì)每一句代碼都注解了詳細(xì)注釋,需要的朋友可以參考下2015-06-06
IDEA配置Gradle及Gradle安裝的實(shí)現(xiàn)步驟
本文主要介紹了IDEA配置Gradle及Gradle安裝的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
Mybatis-plus更新字段為null兩種常用方法及優(yōu)化
Mybatis Plus在進(jìn)行更新操作時(shí),默認(rèn)情況下是不能將字段更新為null的,如果要更新字段為null,需要進(jìn)行以下處理,這篇文章主要給大家介紹了關(guān)于Mybatis-plus更新字段為null的兩種常用方法及優(yōu)化,需要的朋友可以參考下2024-03-03
Java連接Sql數(shù)據(jù)庫經(jīng)常用到的操作
這篇文章主要介紹了Java連接Sql數(shù)據(jù)庫經(jīng)常用到的操作的相關(guān)資料,需要的朋友可以參考下2016-02-02

