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