SpringMVC 自定義攔截器 Interceptor

 

 

 

 

 

如上圖所示,使用了mvc的標籤庫。本地引入路徑。

 

自定義攔截器Interceptor。

1:實現HandlerInterceptor(import org.springframework.web.servlet.HandlerInterceptor;)

preHandle:執行Controller處理方法前執行

postHandle:執行Controller處理方法後,頁面渲染前執行

afterCompletion:頁面渲染後執行

//自定義登陸攔截器
public class LoginInterceptor implements HandlerInterceptor{
      //preHandle方法:在執行Controller的處理方法之前被執行LoginInterceptor 的preHandle方法。
      //執行一些初始化,權限判斷,日誌等處理。  如果返回false 將不會執行Controller中的處理方法
    	@Override
    	public boolean preHandle(HttpServletRequest req, HttpServletResponse resp,
    			Object object) throws Exception {
       //登陸攔截器:
       //1:判斷session中是否有值,若有值,則執行Controller的處理方法。
       //2:若session中沒有值。判斷請求是否訪問登陸頁面login.do或者跳轉登陸頁面toLogin.do。若是,則執行Controller的處理方法。
       //3:跳轉至登陸頁面。不執行Controller的處理方法。
		HttpSession session = req.getSession();
		if(session.getAttribute("user")!=null)
			return true;
		String path=req.getRequestURI();
		if(path.endsWith("toLogin.do")||path.endsWith("login.do"))
			return true;
		resp.sendRedirect("toLogin.do");
		return false;
	}

   //在Controller處理方法執行之後,在被渲染之前 執行 。關閉,釋放,處理一些Controller執行中需要的資源
	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
			Object arg2, ModelAndView arg3) throws Exception {
	}
	
   //在渲染器渲染後被執行。處理一個請求後的一些清理
	@Override
	public void afterCompletion(HttpServletRequest arg0,
			HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
	}
}

 

2:Interceptor攔截器在xml 中的配置

添加標籤庫關注如下:

xmlns:mvc="http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd

 

主要關注<mvc:interceptors>標籤中的內容。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd 
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd 
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!-- 配置handerAdapter  適配器 -->
	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
   
	<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
	    <!-- 將視圖名 渲染後視圖的前綴 -->
	    <property name="prefix" value="/WEB-INF/jsp/"/>
	    <!-- 渲染後視圖的後綴 -->
	    <property name="suffix" value=".jsp"/>
	    <!-- 例:視圖名爲:hello   渲染後:/WEB-INF/jsp/hello.jsp 該頁面-->
	</bean>
 
 
	<!-- spring容器掃描指定包下的所有類,如果類上有註解  那麼根據註解產生相應bean對象已經映射信息 -->
	<!-- 攔截器的配置 -->
	<mvc:interceptors>
	<!-- 在 mvc:interceptors中可以配置多個攔截器,多個攔截器按順序一一執行-->
		<mvc:interceptor>
          <!-- 指明哪些請求需要被攔截 /login.do 表示login.do需要被攔截 /user/add.do 表示/user/add.do請求要被攔截 -->
          <!-- /* 表示項目路徑下的所有請求被攔截, 可以攔截: /login.do  /add.do  /user.do /sys.do等 -->
          <!-- /** 表示項目路徑及其子路徑下的所有請求被攔截=所有請求被攔截。 可以攔截: /login.do  /add.do  /user.do /sys.do /user/add.do -->
          <mvc:mapping path="/**"/>
          <!-- 指定攔截器的位置 -->
          <bean class="cn.sxt.interceptor.LoginInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>
	
 
	<context:component-scan base-package="cn.sxt.controller"/>
</beans>

 

發佈了105 篇原創文章 · 獲贊 43 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章