javascript
SpringMVC经典系列-14自己定义SpringMVC的拦截器---【LinusZhu】
????? 注意:此文章是個(gè)人原創(chuàng)。希望有轉(zhuǎn)載須要的朋友們標(biāo)明文章出處。假設(shè)各位朋友們認(rèn)為寫的還好,就給個(gè)贊哈。你的鼓舞是我創(chuàng)作的最大動(dòng)力,LinusZhu在此表示十分感謝,當(dāng)然文章中如有紕漏,請(qǐng)聯(lián)系linuszhu@163.com,敬請(qǐng)朋友們斧正,謝謝。
????? 這部分主要解說SpringMVC的攔截器的部分。會(huì)帶著大家完畢定義攔截器的兩種方式的實(shí)例。不多說了。開始……
????? SpringMVC的攔截器主要是用于攔截用戶的請(qǐng)求,而且進(jìn)行對(duì)應(yīng)的處理,如:權(quán)限驗(yàn)證、推斷登錄等。
定義攔截器的兩種方式,例如以下:
1.?實(shí)現(xiàn)接口:
org.springframework.web.servlet.HandlerInterceptor
接口中有例如以下方法須要重寫:
注意:參數(shù)中的Object?handler是下一個(gè)攔截器。
a)?public?boolean?preHandle
(HttpServletRequest?request,HttpServletResponse?response,?
Object?handler)?throws?Exception
該方法在action運(yùn)行前運(yùn)行,能夠?qū)崿F(xiàn)對(duì)數(shù)據(jù)的預(yù)處理,比方:編碼、安全控制等。
假設(shè)方法返回true,則繼續(xù)運(yùn)行action。
b)?public?void?postHandle
(HttpServletRequest?request,HttpServletResponse?response,?
Object?handler,ModelAndView?modelAndView)?throws?Exception
該方法在action運(yùn)行后,生成視圖前運(yùn)行。
在這里,我們有機(jī)會(huì)改動(dòng)視圖層數(shù)據(jù)。
c)?public?void?afterCompletion(HttpServletRequest?request,HttpServletResponse?response,?Object?handler,?Exception?ex)throws?Exception
最后運(yùn)行,通經(jīng)常使用于釋放資源,處理異常。我們能夠依據(jù)ex是否為空。來進(jìn)行相關(guān)的異常處理。由于我們?cè)谄綍r(shí)處理異常時(shí)。都是從底層向上拋出異常,最后到了spring框架從而到了這種方法中。
2.?繼承適配器類:
org.springframework.web.servlet.handler.HandlerInterceptorAdapter
這個(gè)適配器實(shí)現(xiàn)了HandlerInterceptor接口。提供了這個(gè)接口中全部方法的空實(shí)現(xiàn)。
以下是我定義的兩中實(shí)現(xiàn)攔截器的演示樣例代碼,僅供大家參考:
| //方式1 package?interceptor; import?javax.servlet.http.HttpServletRequest; import?javax.servlet.http.HttpServletResponse; import?org.springframework.web.servlet.HandlerInterceptor; import?org.springframework.web.servlet.ModelAndView; public?class?MyInterceptor?implements?HandlerInterceptor?{ @Override public?void?afterCompletion(HttpServletRequest?request, HttpServletResponse?response,?Object?handler,?Exception?ex) throws?Exception?{ System.out.println("zxs-最后運(yùn)行! !!一般用于釋放資源!!"); } @Override public?void?postHandle(HttpServletRequest?request, HttpServletResponse?response,?Object?handler, ModelAndView?modelAndView)?throws?Exception?{ System.out.println("zxs-Action運(yùn)行之后。生成視圖之前運(yùn)行。! "); } @Override public?boolean?preHandle(HttpServletRequest?request, HttpServletResponse?response,?Object?handler)?throws?Exception?{ System.out.println("zxs-action之前運(yùn)行。! 。"); return?true;?//?繼續(xù)運(yùn)行action } } |
| //方式2 package?interceptor; import?javax.servlet.http.HttpServletRequest; import?javax.servlet.http.HttpServletResponse; import?org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public?class?MyInterceptor2?extends?HandlerInterceptorAdapter?{ @Override public?boolean?preHandle(HttpServletRequest?request, HttpServletResponse?response,?Object?handler)?throws?Exception?{ System.out.println("MyInterceptor2.preHandle()"); return?true;?//?繼續(xù)運(yùn)行action } } |
3.?springmvc-servlet.xml中怎樣加入例如以下配置,使用攔截器:
| <mvc:interceptors> <!--?攔截器1會(huì)攔截全部.do請(qǐng)求?--> <bean?class="interceptor.MyInterceptor"></bean> <!--?攔截器2會(huì)攔截user.do請(qǐng)求?--> <mvc:interceptor> ????<mvc:mapping?path="/user.do"?/> <bean?class="interceptor.MyInterceptor2"></bean> </mvc:interceptor> </mvc:interceptors> |
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/bhlsheji/p/5362191.html
總結(jié)
以上是生活随笔為你收集整理的SpringMVC经典系列-14自己定义SpringMVC的拦截器---【LinusZhu】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [单选题]PDO::ATTR_ERRMO
- 下一篇: 《编写高质量代码改善JavaScript