剛好學到這裏,然後覺得這個springmvc的攔截器還是很有用的,比如你直接通過ip地址去訪問某個網站的內部,這個時候要是沒有攔截器,這個就不相當於跳過了登陸註冊直接訪問數據庫嘛,所以我們要在調用每個方法的時候進行一次攔截,保證你是有權力訪問這個網站的
先看在springmvc.xml配置文件中怎麼書寫
<!-- 配置攔截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="cn.itheima.springmvc.interceptor.interceptor1"></bean>
</mvc:interceptor>
<!-- <mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="cn.itheima.springmvc.interceptor.interceptor2"></bean>
</mvc:interceptor> -->
</mvc:interceptors>
<mvc:interceptors/>:是攔截器的標籤,裏面可以配置多個攔截
<mvc:intercepor/>:這個標籤內主要寫攔截的類型(/**就是所有的都攔截)和攔截的方法(bean內寫攔截的方法)
就是當你通過service層訪問某個方法的時候就會先通過攔截器一次,把違規的操作進行一次篩選吧,個人覺得
public class interceptor1 implements HandlerInterceptor{
@Override
public void afterCompletion(HttpServletRequest arg0,
HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
System.out.println("頁面渲染後調用1");
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2, ModelAndView arg3) throws Exception {
// TODO Auto-generated method stub
System.out.println("方法後調用1");
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object object) throws Exception {
System.out.println("方法前調用1");
String URI = request.getRequestURI();
if(!URI.contains("/login")){
String username = (String) request.getSession().getAttribute("username_session");
if(null == username){
response.sendRedirect(request.getContextPath()+"/login.action");
return false;
}
}
return true;
}
}
這個攔截方法實現了HandlerIntercepor接口內的方法,這裏實現接口內的三個方法:首先我們要知道什麼是方法前,方法後,頁面渲染後。這幾個抽象的概念(但是我覺得字面意思就是你感覺的那個意思),先看一下圖,瞭解一下攔截器的執行流程
這樣的執行過程,如果方法前放行(也就是return ture; 要是return false;就表示攔截),那麼纔有後面的方法後,和頁面渲染後,
如果多個攔截器在,他也有自己的規則:
①preHandle 按攔截器定義順序調用
②postHandler按攔截器定義逆序調用
③afterCompletion按攔截器定義逆序調用
④posthandler在攔截器鏈內所有攔截器返成功調用
⑤afterCompletion只有prehandle返回true才調用
大家也可以DUBUG一下看一下它具體的執行流程,哈哈哈,繼續保持寫博客