1. 程式人生 > >SpringBoot中利用AOP實現攔截器效果

SpringBoot中利用AOP實現攔截器效果

既然使用Spring,AOP就是不了或缺的。

嘗試好多遍,踩了很多坑,最後總算把效果弄出來了。說起來很簡單,只需要建一個類就好了。

@Aspect
@Configuration
public class InfoInterceptor {
    private static final String execution_str_01 = "execution(* com.chris.controller.*.*(..))";//controller包下任意方法
    private static final String execution_str_02 = "execution(* com.chris.controller..*.*(..))";//controller包或子包下任意方法
    private static final String execution_str_03 = "@annotation(org.springframework.web.bind.annotation.RequestMapping)";//帶RequestMapping註解的方法
    private static final String execution_str_04 = "execution(* com.chris.controller..*(..))";//controller包或子包下任意方法

    @Pointcut(execution_str_04)
    private void controllerCut() {
    }

    @Before(value = "controllerCut()")
    public void cutBefore(JoinPoint joinPoint) {
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest httpServletRequest = requestAttributes.getRequest();
        MsgUtils.show("AOP==>" + httpServletRequest.getRequestURL());
        MsgUtils.show("AOP==>" + joinPoint.getSignature());
  }
}

效果:


網上查過很多資料,每個人的配置方式都不一樣。大致有以下一些,不過最後證實,沒有也是可以的:

1.Application類,新增掃描註解:@ComponentScan(basePackages = "com.chris")

2.攔截器使用@Component註解,測試使用@Component或者@Configuration都可以

3.在application.properties中新增spring.aop.auto=true,經測試不加一樣可以

4.在pom.xml檔案中新增一下節點

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
經測試,不新增一樣可以。

測試所浪費的時間,主要還是在execution表示式上。筆者根據網上的資料設計的很多表達式都不成功,目前貼出來的是成功測試過的。還有,就是使用註解判定成功率比較高,個人感覺這樣也是比較方便的,自己寫一個註解,用起來應該比較靈活。

關於execution表示式,還需要多花點時間去研究。

相關推薦

SpringBoot利用AOP實現攔截效果

既然使用Spring,AOP就是不了或缺的。 嘗試好多遍,踩了很多坑,最後總算把效果弄出來了。說起來很簡單,只需要建一個類就好了。 @Aspect @Configuration public class InfoInterceptor { private stat

Springboot利用aop和註解實現動態資料來源

本篇文章將介紹如何使用AOP和註解來實現動態資料來源. 使用ThreadLocal儲存當前執行緒使用的資料來源的key import org.slf4j.Logger; import org.slf4j.LoggerFactory; /**

Springboot靜態資源和攔截處理

背景: 在專案中我使用了自定義的Filter 這時候過濾了很多路徑,當然對靜態資源我是直接放過去的,但是,還是出現了靜態資源沒辦法訪問到springboot預設的資料夾中得檔案   說下預設對映的資料夾有: classpath:/META-INF/resourc

SpringBoot使用自定義攔截

一、新建一個SpringBoot工程,目錄結構如下: 二、在核心配置檔案application.properties中配置檢視解析器格式 #配置檢視解析器解析檔案的格式 spring.mvc.view.prefix=/ spring.mvc.view.suffix=.html 三、新建一個

springboot的兩種實現攔截的方法

一、使用Interceptor攔截器1.首先新建一個攔截器實現HandlerInterceptor介面以一個簡單的token驗證為例,驗證通過,將使用者資訊放入作用域,返回true不通過返回false@Servicepublic class UserTokenIntercep

Springboot自定義springmvc攔截;HandlerInterceptorpreHandle,postHandle,afterCompletion解析

要實現自定義HandlerInterceptor 。通過 WebMvcConfigurer 的實現類屬性注入,完成springboot自定義攔截 自定義一個攔截器; package com.baidu.

SpringBoot兩種方式實現攔截

一、使用Interceptor攔截器1.首先新建一個攔截器實現HandlerInterceptor介面以一個簡單的token驗證為例,驗證通過,將使用者資訊放入作用域,返回true不通過返回false@Service public class UserTokenInterce

Android利用RecyclerView實現瀑布流效果

RecyclerView相比於傳統的ListView,功能更加強大,使用也比較方便,因此Android官方更加推薦使用RecycleView,未來也會有更多的程式逐漸從ListView轉向RecycleView。為此,首先先來了解下RecycleView的用法。當然,最先看

springBoot利用AOP切面設定全域性事務

package test.spring.config; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.springframework.aop.

spring boot 使用spring AOP實現攔截

在spring boot中,簡單幾步,使用spring AOP實現一個攔截器: 1、引入依賴: <dependency> <groupId>org.springframework.boot</groupId> <art

SpringBoot實現攔截級別的URl訪問過快攔截,並利用JPA實現IP黑名單的功能。

今天給大家介紹一下SpringBoot中實現攔截器級別URl過快訪問攔截,並利用JPA實現IP黑名單的功能。 上一節中已經將中已經介紹了在控制器層面上面的URL攔截,這一節則側重於網站全域性式的攔截。就是不管輸入什麼URL地址都會進行過濾,判斷是否存在URL訪問過快的情況發

SpringBoot實現攔截, 並實現對404和500等錯誤的攔截

今天給大家介紹一下SpringBoot中攔截器的用法,相比Struts2中的攔截器,SpringBoot的攔截器就顯得更加方便簡單了。只需要寫幾個實現類就可以輕輕鬆鬆實現攔截器的功能了,而且不需要配置任何多餘的資訊,對程式設計師來說簡直是一種福利啊。廢話不多說,下面開始介紹攔

Spring AOP實現:攔截鏈的生成以及Advice通知的實現

攔截器鏈的獲取生成 上一次我說到了攔截器鏈的獲取,攔截器鏈的獲取以及生成是從一個DefaultAdvisorChainFactory類中得到的。我們來看一下具體的實現程式碼 public List<Object> getInterceptorsAndDynamicInterc

springboot-監聽器,過濾器,攔截aop,自定義註解

springboot基礎-監聽器,過濾器,攔截器,aop,自定義註解 文章目錄 springboot基礎-監聽器,過濾器,攔截器,aop,自定義註解 1.監聽器 2.過濾器 3.攔截器 4.aop 5.自定義註解

利用ajax全局設置實現攔截

set var javascrip 攔截器 利用 div brush ren oca var token = localStorage.getItem("token"); $.ajaxSetup({ dataType: "json", cache: false,

利用xfire框架攔截(Handler)實現介面訪問日誌列印

前景:             因專案中釋出了80+個介面,需要給每個介面加上請求和響應的日誌資訊。(PS:沒日誌很蛋疼老是背鍋。)給這些介面加上日誌資訊的同時還必須滿足介面功能不受影響。 方案:             根據研究發現可以使用xfire的handler攔

springboot實現攔截

1,先寫個介面,如下: 測試一下寫好的介面,如下 2,新建一個類並實現HandlerInterceptor,如下 基本的攔截只需要重寫preHandle方法,下面兩個方法可以不用管 3,新建一個類,繼承WebMvcConfigurerAdapter,並加入第2步新建的

RecyclerView利用GridLayoutManager實現item四周都帶有分割線效果(更正版!!!)

今天,花了很長的時間才實現瞭如題的效果,回想一下,實現起來確實不難,只怪當時做的時候思路不清晰,沒想好就動手了,這是病,得改!好了,不多說,實現工程中主要參考了鴻洋部落格中Android RecyclerView 使用完全解析 體驗藝術般的控制元件Divider

springBoot實現攔截的幾種方式

1)攔截器實現HandlerInterceptor介面,重寫三個方法:preHandle,postHandle,afterCompletion, MySpringMVCConfig 實現 WebMvcConfigurer 重寫addInterceptors方法,新增攔截路徑及排除攔截路徑。 im

PHP利用redis實現訊息佇列處理高併發請求--簡潔程式碼實現效果

將請求存入redis 為了模擬多個使用者的請求,使用一個for迴圈替代 //redis資料入隊操作 $redis = new Redis(); $redis->connect('127.0.