這篇文章如果能給你帶來幫助 不勝榮幸,如果有錯誤 ,歡迎批評指正,共同進步。
今天啊搭了一個ssm的框架 雖然說現在大部分都在使用shiro權限,可是正如mybatis、hibernate和jdbc的感覺一樣。我認為還是有必要掌握以下springMVC的攔截器的。
說實話,本人因為實力有限,並沒有深入的去挖攔截器的源代碼,會使用也是很久之前的了,每次用的時候,采用ctrl+c,ctrl+v大法。但是似乎這次沒有這么幸運了,可能是這次是
全新的框架吧,沒有復制以前的而是從網上扒的代碼。結果出現了兩件坑:第一個坑:jsp界面攔截不了。第二個問題 js.css等靜態資源卻被攔截了。真是哭笑不得。想要的和攔截的截然相反。我這個人實力也不強,直接告訴怎么解決,不在多跟大家瞎扯淡。首先當你配置了你自己的攔截器的bean之后。我是這樣配置的:
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { /*System.out.println("請求處理前執行"); HttpSession session=request.getSession(); User user= (User) session.getAttribute("user"); response.setContentType("text/html;charset=utf-8"); String url=request.getRequestURI();//獲取請求的地址 String path = url.substring(url.indexOf("/",1)+1); System.out.println(path); if(path.equals("")||path.equals("login.jsp")||url.endsWith("user/login")||url.endsWith(".png")||url.endsWith(".jpg")||url.endsWith(".css")||url.endsWith(".js")){//放行 return true; }else{ if(user==null){ response.sendRedirect("/myssm/login.jsp"); return false; }else{ return true; } }*/ return true; }
在springMVC的xml配置文件中(因為每個人的springMVC的配置文件不相同。 )看看是不是跟我一樣:有經過簡化的靜態資源加載的標簽和簡單的創建了一個攔截器的對象:
<mvc:default-servlet-handler/>
<mvc:interceptors>
<!-- 創建攔截器對象 -->
<bean id="my" class="com.utils.MyInterceotor"/>(其中MyInterceotor是你自己的攔截器的類名)
</mvc:interceptors>
或許還有的人在這個配置文件里面繼續放行了一些其他的靜態資源 。我沒有 因為怕出錯,有的網上也是說的很專業,非科班出身的很難看懂。
這個時候ni你不妨在web.xml中配置放行靜態資源的代碼:
<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> <url-pattern>*.css</url-pattern> <url-pattern>/assets/*"</url-pattern> <url-pattern>/images/*</url-pattern> </servlet-mapping>
好了,這樣就可以了,靜態資源就可以穩穩的放行了。說來也怪,當時學的時候也沒人根據的解釋為什么jsp不是靜態資源。網上說解決的方法有很多 ,我呢 就不跟大家強勢介紹很多了,1:就是把你的全部jsp界面放到 WEB-INF下 這樣自動會給你提供一個保護,但是說實話.(很多培訓出來的人可能都知道 幾乎講的時候是不會吧jsp界面放到WEB-INF下的,因為為了講課方便) 第二個就是很過濾器一起使用來一個雙重保護經過Filter來攔截界面。說實話,因為使用很少使用過濾器了,所以在web.xml當中的配置,和其他的都不發代碼了。大家可以自行百度。