原 薦 Spring Boot 優雅的配置攔截器方式
字數 746
閱讀 1
收藏 0
Spring Spring Boot" rel="nofollow,noindex" target="_blank">Spring Boot Interceptor
開發十年,就只剩下這套Java開發體系了 >>>
其實spring boot攔截器的配置方式和springMVC差不多,只有一些小的改變需要注意下就ok了。下面主要介紹兩種常用的攔截器:
一、基於URL實現的攔截器:
public class LoginInterceptor extends HandlerInterceptorAdapter{ /** * 在請求處理之前進行呼叫(Controller方法呼叫之前) * 基於URL實現的攔截器 * @param request * @param response * @param handler * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String path = request.getServletPath(); if (path.matches(Const.NO_INTERCEPTOR_PATH)) { //不需要的攔截直接過 return true; } else { // 這寫你攔截需要乾的事兒,比如取快取,SESSION,許可權判斷等 System.out.println("===================================="); return true; } } }
關鍵程式碼:path.matches(Const.NO_INTERCEPTOR_PATH 就是基於正則匹配的url。
/** * @author BianP * @explain 常量類 */ public class Const { public static final String SUCCESS = "SUCCESS"; public static final String ERROR = "ERROR"; public static final String FIALL = "FIALL"; /**********************物件和個體****************************/ public static final String SESSION_USER = "loginedAgent"; // 使用者物件 public static final String SESSION_LOGINID = "sessionLoginID"; // 登入ID public static final String SESSION_USERID = "sessionUserID"; // 當前使用者物件ID編號 public static final String SESSION_USERNAME = "sessionUserName"; // 當前使用者物件ID編號 public static final Integer PAGE = 10; // 預設分頁數 public static final String SESSION_URL = "sessionUrl"; // 被記錄的url public static final String SESSION_SECURITY_CODE = "sessionVerifyCode"; // 登入頁驗證碼 // 時間 快取時間 public static final int TIMEOUT = 1800;// 秒 public static final String ON_LOGIN = "/logout.htm"; public static final String LOGIN_OUT = "/toLogout"; // 不驗證URL anon:不驗證/authc:受控制的 public static final String NO_INTERCEPTOR_PATH =".*/((.css)|(.js)|(images)|(login)|(anon)).*"; }
二、基於註解的攔截器
①建立註解:
/** * 在需要登入驗證的Controller的方法上使用此註解 */ @Target({ElementType.METHOD})// 可用在方法名上 @Retention(RetentionPolicy.RUNTIME)// 執行時有效 public @interface LoginRequired { }
②建立攔截器:
public class AuthorityInterceptor extends HandlerInterceptorAdapter{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 如果不是對映到方法直接通過 if (!(handler instanceof HandlerMethod)) { return true; } // ①:START 方法註解級攔截器 HandlerMethod handlerMethod = (HandlerMethod) handler; Method method = handlerMethod.getMethod(); // 判斷介面是否需要登入 LoginRequired methodAnnotation = method.getAnnotation(LoginRequired.class); // 有 @LoginRequired 註解,需要認證 if (methodAnnotation != null) { // 這寫你攔截需要乾的事兒,比如取快取,SESSION,許可權判斷等 System.out.println("===================================="); return true; } return true; } }
三、把攔截器新增到配置中,相當於SpringMVC時的配置檔案乾的事兒:
/** * 和springmvc的webmvc攔截配置一樣 * @author BIANP */ @Configuration public class WebMvcConfigurer extends WebMvcConfigurationSupport { @Override public void addInterceptors(InterceptorRegistry registry) { // 攔截所有請求,通過判斷是否有 @LoginRequired 註解 決定是否需要登入 registry.addInterceptor(LoginInterceptor()).addPathPatterns("/**"); registry.addInterceptor(AuthorityInterceptor()).addPathPatterns("/**"); super.addInterceptors(registry); } @Bean public LoginInterceptor LoginInterceptor() { return new LoginInterceptor(); } @Bean public AuthorityInterceptor AuthorityInterceptor() { return new AuthorityInterceptor(); } }
一定要加@Configuration 這個註解,在啟動的時候在會被載入。還有一些教程是用的“WebMvcConfigurerAdapter”,也是一樣的,但是會提示這個方法是過時的了。
其實springMVC很多東西,都可以搬到springboot中來使用,只需要把配置檔案的模式,改成 對應@Configuration 類就好了。

© 著作權歸作者所有
共有人打賞支援
相關文章 最新文章
在spring boot 1.5.x中,resources/static目錄下的靜態資源可以直接訪問,並且訪問路徑上不用帶static,比如靜態資源放置位置如下圖所示: 那麼訪問靜態資源的路徑可以是: http://localhost...
Mr---D
04/13
0
0
初升級版本,在已經使用的系統內還是存在一些相容性的問題,有很多變化!!!也存在一些過時的方法、配置檔案資訊以及類,我們在之前版本的中可以使用抽象類來處理相關的配置,由於版本最低支...
恆宇少年
03/17
0
0

SpringBoot詳解系列文章: SpringBoot詳解(一)-快速入門 SpringBoot詳解(二)-Spring Boot的核心 SpringBoot詳解(三)-Spring Boot的web開發 SpringBoot詳解(四)-優雅地處理日誌 一、w...
CSDN_LQR
2017/08/30
0
0

Spring Boot 初識 SpringBoot前世今生 本文主要講述spring boot的由來,即其它誕生的背景,初衷,現狀,及對未來的展望。 Spring Boot參考指南中文版--Chapter1.Spring Boot中文文件 本節提供...
小致dad
2017/11/07
0
0
RabbitMQ RabbitMQ 安裝 linux安裝RabbitMQ詳細教程 Ubuntu 16.04 RabbitMq 安裝與執行(安裝篇) ubantu安裝rabbitMQ步驟 多執行緒 Spring @transactional註解和synchronized同步鎖同時使用不...
OSC_fly
07/26
0
0
沒有更多內容
載入失敗,請重新整理頁面
載入更多何為泛型(Generics) 面向物件程式語言的多型特性包括:任一多型(ad hoc polymorphism,又名過載)、子型別多型(subtype polymorphism,又名覆蓋)以及引數多型(parameter polymorphism,...
SamYjy
33分鐘前
2
0

CSS介紹及佈局特定 層疊樣式表是一種用來表現HTML(標準通用標記語言的一個應用)或XML(標準通用標記語言的一個子集)等檔案樣式的計算機語言。 CSS目前最新版本為CSS3,是能夠真正做到...
青衣霓裳
33分鐘前
2
0

它是一個高效能的Key-Value資料庫。設計了完善的持久化機制,同時保證效能和安全性。能夠良好的支援範圍查詢,因為K-V記錄就是按照Key來排序的。 下圖為寫入的流程: 可以看到主要的三個組成...
許此一生
39分鐘前
10
0

2015年,阿里雲宣佈正式推出RDS for PostgreSQL服務,屆時,阿里雲成為國內首家同時支援MySQL、SQL Server 和PostgreSQL關係型資料庫的雲端計算服務商。 使用者在雲上就能享受PostgreSQL引擎帶來的...
迷你芊寶寶
40分鐘前
4
0

狀態名 作用域 詳細解釋 Aborted_clients Global 由於客戶端沒有正確關閉連線導致客戶端終止而中斷的連線數 Aborted_connects Global 試圖連線到MySQL伺服器而失敗的連線數 Binlog_cache_dis...
若傑
46分鐘前
1
0
沒有更多內容
載入失敗,請重新整理頁面
載入更多