Java自定義攔截器詳細教程
阿新 • • 發佈:2018-12-28
前言
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";
}
}