攔截器的目的就是:用戶所屬的session不存在後進行對控制器請求的攔截,使跳轉到首頁或者登陸頁面。
1、首先在web.xml中配置dispatcher-servlet.xml 。代碼中對應的<servlet-name>中的dispatcher 映射的就是dispatcher-servlet.xml文件
1
2
3
4
5
6
7
8
9
10
|
<servlet> <servlet-name>dispatcher</servlet-name> <servlet- class >org.springframework.web.servlet.DispatcherServlet</servlet- class > <load- on -startup>1</load- on -startup> </servlet> <!--
springmvc 請求後綴 --> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*. do </url-pattern><!--
攔截所有以. do 結尾的請求,交於DispatcherServlet處理
--> </servlet-mapping> |
2、在dispatcher-servlet.xml 文件中配置攔截器需要攔截的目錄,其中處理攔截的具體實現類的在第三步新建,對應的包路徑需要修改。
1
2
3
4
5
6
7
8
9
10
11
12
|
<!--
配置攔截器 --> <mvc:interceptors> <mvc:interceptor> <!--
攔截器攔截的URL格式 --> <mvc:mapping
path= "/*.do" ></mvc:mapping> <!--
攔截器不攔截的controller --> <mvc:exclude-mapping
path= "/toLogin.do" > <mvc:exclude-mapping
path= "/login.do" > <!--
處理攔截的具體實現類 包路徑爲src下目錄路徑--> <bean class = "com.springmvc.interceptor.LoginInterceptor" ></bean> </mvc:exclude-mapping></mvc:exclude-mapping></mvc:interceptor> </mvc:interceptors> |
3、新建攔截器具體實現類,注意攔截器的具體實現類繼承自類HandlerInterceptorAdapter。
1
|
preHandle->postHandle->afterCompletion,這三個方法是依次執行的 |
preHandle():這個方法在業務處理器處理請求之前被調用,在該方法中對用戶請求request進行處理。如果程序員決定該攔截器對請求進行攔截處理後還要調用其他的攔截器,或者是業務處理器去進行處理,則返回true;如果程序員決定不需要再調用其他的組件去處理請求,則返回false。
postHandle():這個方法在業務處理器處理完請求後,但是DispatcherServlet向客戶端返回請求前被調用,在該方法中對用戶請求request進行處理。
afterCompletion():這個方法在DispatcherServlet完全處理完請求後被調用,可以在該方法中進行一些資源清理的操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
public class LoginInterceptor extends HandlerInterceptorAdapter
{ //
繼承HandlerInterceptorAdapter類 //
重寫 preHandle()方法,在業務處理器處理請求之前對該請求進行攔截處理 @Override public boolean preHandle(HttpServletRequest
request, HttpServletResponse
response, Object handler) throws Exception
{ //UserModal
user = (UserModal) request.getSession().getAttribute("userInfo"); //if(user
== null){ //
response.sendRedirect("/toLogin.do"); //
return false; //
} 這是對登錄的攔截,獲取登錄是的session,如果獲取不到將攔截跳轉到登錄界面。攔截器的登錄應用基本都是對session的應用 return true ; } @Override public void postHandle(HttpServletRequest
request, HttpServletResponse
response, Object o, ModelAndView mav) throws Exception
{ System.out.println( "----------postHandle" ); } @Override public void afterCompletion(HttpServletRequest
request, HttpServletResponse
response, Object o, Exception excptn) throws Exception
{ } } |
4、攔截器的基本配置基本配置就完成了。