springmvc攔截器用作驗證登陸

springmvc攔截器用作驗證登陸

 一、寫一個實現了HandlerInterception的類

 實現接口中的3個方法,對於這三個方法,簡單介紹一下

  1. preHandle方法:進入Handler方法之前執行。可以用於身份認證、身份授權。比如如果認證沒有通過表示用戶沒有登陸,需要此方法攔截不再往下執行(return false),否則就放行(return true)。
  2. postHandle方法:進入Handler方法之後,返回ModelAndView之前執行。可以看到該方法中有個modelAndView的形參。應用場景:從modelAndView出發:將公用的模型數據(比如菜單導航之類的)在這裏傳到視圖,也可以在這裏同一指定視圖。
  3. afterCompletion方法:執行Handler完成之後執行。應用場景:統一異常處理,統一日誌處理等。
那麼實現登陸驗證我們則需要在preHandle中進行操作,如下
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;
		
		
	}

}

那麼這個session中的username什麼時候放入喃

二、負責登陸的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

   


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