概述
SpringMVC的處理器攔截器類似於Servlet開發中的過濾器Filter,用於對處理器進行預處理和後處理。
開發者可以自己定義一些攔截器來實現特定的功能。
過濾器與攔截器的區別:攔截器是AOP思想的具體應用。
過濾器
servlet規範中的一部分,任何java web工程都可以使用
在url-pattern中配置了/*之後,可以對所有要訪問的資源進行攔截
攔截器
攔截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能使用
攔截器只會攔截訪問的控制器方法, 如果訪問的是jsp/html/css/image/js是不會進行攔截的
自定義攔截器
想要自定義攔截器,必須實現 HandlerInterceptor 接口。
1、新建一個Moudule , springmvc-07-Interceptor , 添加web支持
2、配置web.xml 和 springmvc-servlet.xml 文件
3、編寫一個攔截器
1 | package com.kuang.interceptor; |
4、在springmvc的配置文件中配置拦截器
1 | <!--關於攔截器的配置--> |
5、編寫一個Controller,接收請求
1 | package com.kuang.controller; |
6、前端 index.jsp
1 | <a href="${pageContext.request.contextPath}/interceptor">攔截器測試</a> |
7、啟動tomcat 測試一下!
使用攔截器驗證用戶
編寫LoginController
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16//登入
public String login(String enterEmail, String enterPassword , HttpSession session){
try {
User user = bookService.getUser(enterEmail);
String password = user.getUserPassword();
if(enterPassword.equals(password)){//判斷密碼是否正確
session.setAttribute("userSession", enterEmail);//在session傳入enterEmail
return "redirect:/queryAllBook";
}else {
return "loginFailed";//轉發到錯誤頁面
}
}catch (Exception e){
return "loginFailed";
}
}編寫攔截器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16package com.linyu.config;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
if(session.getAttribute("userSession")!=null){//判斷session中是否有值
return true;//通行
}
request.getRequestDispatcher("/login.jsp").forward(request, response);
return false;//攔截
}
}xml中配置
1
2
3
4
5
6<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/user/**"/><!--user路徑下都會通過攔截器-->
<bean class="com.linyu.config.LoginInterceptor"/><!--攔截器全路徑-->
</mvc:interceptor>
</mvc:interceptors>