1. 程式人生 > >Java自定義攔截器詳細教程

Java自定義攔截器詳細教程

前言

Java程式設計中經常會有一些需要我們進行登入攔截的操作,或者實現,那麼怎麼用java程式碼實現一個攔截器呢?一般情況下實現攔截器需要兩步,今天就給大家演示一個攔截器,廢話不多說,程式碼+註釋直接奉上!

第一步:自定義攔截器

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;

/**
  *自定義攔截器
  *實現HandlerInterceptor介面
  **/
public class LoginInterceptor implements HandlerInterceptor{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 獲取作用域的user資訊,此user資訊需要在登入操作的同事放到作用域,以便於此處獲取 String user=(String) request.getSession().getAttribute("user"
); //獲取請求的路徑 String url=request.getRequestURI(); //列印路徑資訊,作為後臺日誌進行檢視 System.out.println(url); //判斷user物件的內容是否不為空; //或者是否是訪問的後臺登入方法(login); //因為我的頁面直接匯入的easyUI的js包為防止把頁面樣式攔截,所以加個判斷,如果不是這樣的話此判斷可以省略 if(user!=null|url.endsWith("專案名/login")|url.lastIndexOf("jquery-easyui-1.4")>-1) { return HandlerInterceptor.
super.preHandle(request, response, handler); }else { //判斷沒通過,證明使用者沒有進行登入操作,操作非法,進行返回登入頁面(login.jsp)進行登入 //返回錯誤提示資訊("請先登入!") request.getSession().setAttribute("msg", "請先登入!"); response.sendRedirect("login.jsp"); return false; } } }

第二步:攔截器註冊類,使攔截器生效

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyConfig implements WebMvcConfigurer {
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		// 使攔截器生效1.此處引數是我們自定義的攔截器名( LoginInterceptor ) 2.新增攔截規則(/**)攔截全部               
		registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**");
		WebMvcConfigurer.super.addInterceptors(registry);
	}
	
}

控制層程式碼

    //登入驗證是否是name='zhangsan',pwd='123' 的使用者
	@RequestMapping("login")
	public String doLogin(String name,String pwd,HttpServletRequest request) {
		//從請求中獲取登入名資訊,放到user物件,並放入作用域中,方便攔截器獲取
		request.getSession().setAttribute("user", name);
			//判斷使用者名稱和密碼是否正確,此處也可以進行後臺資料庫的查詢,我為了簡單寫死了登入名和密碼
			if(name.equals("zhangsan")&&pwd.equals("123")) {
				//使用者名稱和密碼正確重定向到跳轉頁面的後臺方法
				return "redirect:toPageList";
			}else {
				// 登入失敗,返回提示資訊
				request.getSession().setAttribute("msg", "賬號或密碼錯誤!");
				//返回登入頁面,重新登入
				return "login";
			}
	}