springmvc攔截器用作驗證登陸
一、寫一個實現了HandlerInterception的類
實現接口中的3個方法,對於這三個方法,簡單介紹一下
- preHandle方法:進入Handler方法之前執行。可以用於身份認證、身份授權。比如如果認證沒有通過表示用戶沒有登陸,需要此方法攔截不再往下執行(return false),否則就放行(return true)。
- postHandle方法:進入Handler方法之後,返回ModelAndView之前執行。可以看到該方法中有個modelAndView的形參。應用場景:從modelAndView出發:將公用的模型數據(比如菜單導航之類的)在這裏傳到視圖,也可以在這裏同一指定視圖。
- afterCompletion方法:執行Handler完成之後執行。應用場景:統一異常處理,統一日誌處理等。
public class Interceptor1 implements HandlerInterceptor{
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
// TODO Auto-generated method stub
//當請求去的是登陸頁面就直接放行
if(arg0.getRequestURI().contains("login")){
return true;
}
HttpSession session= arg0.getSession();
String username=(String) session.getAttribute("username");
if(username!=null){
return true;
}
//跳轉到登陸界面進行登陸
arg0.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(arg0, arg1);
return false;
}
}
二、負責登陸的controller
@Controller
public class LoginController {
@Autowired
private StudentsinfoService studentsinfoService;
@RequestMapping(value="/login")
public String login(HttpServletRequest request,String username,String password){
HttpSession session=request.getSession();
//這裏爲驗證此用戶名和密碼是否正確,不一定按照這個地方的來寫
if(username!=null){
if(studentsinfoService.isStudent(username,password)){
session.setAttribute("username", username);
return "user";
}
String massage="賬號或密碼錯誤";
session.setAttribute("massage", massage);
//否則 登錄失敗 返回登陸頁面
return "login";
}
}
三、相應的配置
在springmvc(dispatcherServlet-servlet.xml)中配置
<mvc:interceptor > <mvc:mapping path="/**"/> //代表全部路徑 <bean class="com.students.controller.Interceptor1"/> //攔截器的類名 </mvc:interceptor> </mvc:interceptors>
但是這樣的話有些靜態資源就會加載不到,那我們可以再加點配置
<mvc:resources mapping="/resources/**" location="/static/resources" />
<mvc:resources mapping="/static/css/**" location="/static/bootstrap-3.3.7-dist/css/" />
<mvc:resources mapping="/static/images/**" location="/static/images/" />
<mvc:resources mapping="/static/js/**" location="/static/bootstrap-3.3.7-dist/js/" />
配置完成了 現在就可以對其進行登陸驗證了
四:其他問題
但是這裏會有2個問題
1.當前臺是ajax傳過來的請求的時候攔截器並不能跳轉,原因可想而知了,因爲ajax是局部的,不管是成功還是失敗都會由ajax的的成功或者失敗函數的進行處理。
解決這個問題請看我的下一篇博文http://blog.csdn.net/make__it/article/details/78841070
2.springmvc的攔截器只會攔截對controller的訪問,不會攔截對jsp的訪問,前端客戶還是能直接訪問到jsp
可看我的下一篇文章http://blog.csdn.net/make__it/article/details/78841373