springmvc攔截器的應用

剛好學到這裏,然後覺得這個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一下看一下它具體的執行流程,哈哈哈,繼續保持寫博客


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章