1. 程式人生 > >利用spring aop攔截並獲取@ResponseBody資料

利用spring aop攔截並獲取@ResponseBody資料

攔截請求有很多種方法,最簡單的用攔截器,但是攔截器並不能獲取返回的資料(比如@ResponseBody),上網找了一段時間,可以利用spring的AOP特性攔截並獲取,還能修改返回的資料。

  • 準備
<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjrt</artifactId>
  <version>1.8.9</version>
</dependency>
<dependency>
  <groupId
>
org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.9</version> </dependency>
  • 攔截程式碼
package com.jujin.riskmanager.interceptor;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

import
com.fasterxml.jackson.databind.ObjectMapper; import com.jujin.common.JsonList; public class ResultInterceptor implements MethodInterceptor { private final static ObjectMapper jsonMapper = new ObjectMapper(); @Override public Object invoke(MethodInvocation invocation) throws Throwable { Object result = invocation.proceed(); // 隨意處理結果吧
System.out.println("After: result: "+ jsonMapper.writeValueAsString(result)); return result; } }
  • spring配置
<!-- AOP -->
<bean id="controllerMethodInterceptor"          class="com.jujin.riskmanager.interceptor.ResultInterceptor"/>  

<aop:config proxy-target-class="true">  
   <aop:pointcut id="controllerMethodPointcut" expression="execution(* com.jujin.riskmanager.controller..*(..)) and @annotation(org.springframework.web.bind.annotation.RequestMapping)"/>  
   <aop:advisor advice-ref="controllerMethodInterceptor" pointcut-ref="controllerMethodPointcut" />  
</aop:config>

相關推薦

利用spring aop攔截獲取@ResponseBody資料

攔截請求有很多種方法,最簡單的用攔截器,但是攔截器並不能獲取返回的資料(比如@ResponseBody),上網找了一段時間,可以利用spring的AOP特性攔截並獲取,還能修改返回的資料。 準備

Spring AOP的實現:Spring AOP攔截器呼叫的實現

上次我說到關於ProxyFactoryBean物件的getObject方法返回了一個代理物件。剩下的AOP實現過程就和jdk的代理模式相同。通過呼叫這個代理物件的方法(這個方法和目標物件是相同的),但是實際上是呼叫了invoke方法,通過反射來實現方法的增強。 關於jdk如何實現代理模式的反

利用CMS漏洞滲透獲取某伺服器許可權

利用CMS漏洞滲透並獲取某伺服器許可權 在phpmyadmin漏洞與利用專題中,我們從多個角度介紹瞭如何獲取webshell並獲取伺服器許可權的案例和情形,但在實際滲透過程中還有一種情況,即伺服器上存在phpMyAdmin,且獲取了root帳號和密碼,但無法執行load_file或者說無法匯

記第一次使用spring aop攔截service

<bean id="Audience" class="com.czx.core.aspect.Audience"></bean> <!--開啟自動掃描--> <context:component-scan base-package="

利用Spring AOP自定義註解解決日誌和簽名校驗

一、需解決的問題 部分API有簽名引數(signature),Passport首先對簽名進行校驗,校驗通過才會執行實現方法。     第一種實現方式(Origin):在需要簽名校驗的接口裡寫校驗的程式碼,例如: boolean isValid = accountService.val

Spring AOP攔截對Controller的請求時的配置失敗

之前學了Spring AOP的內容,在普通的應用上使用是沒有問題的,後來由於做web程式,所以想用來攔截http的請求,以便記錄日誌,但是在配置過程當中,出現了錯誤,具體內容如下: 之前我們講到,要配置一個切面類,要把它放入IoC容器中,並且還要使用如下程式碼配置: &l

【框架】[Spring]AOP攔截-三種方式實現自動代理

這裡的自動代理,我講的是自動代理bean物件,其實就是在xml中讓我們不用配置代理工廠,也就是不用配置class為org.springframework.aop.framework.ProxyFactoryBean的bean。 總結了一下自己目前所學的知識

Android 動態新增textView或EditText,獲取輸入資料

問題引入 Android開發中往往需要動態建立諾幹個同類控制元件,或對他們設定點選事件或批量獲取他們的值,下面提供我在開發中所使用的一種參考。 動態建立多個textView,這裡描述一個頁面取名為:

python 用 requests傳送get請求獲取json資料

java進行一次get請求,少說都要洋洋灑灑一兩百行程式碼,建立流,發請求,解析資料,關閉流等等而python就四行業務程式碼    import requests    #請求地址    url = "https://api.global.net/datastore/v1/

如何利用Spring AOP實現異常重試

微信公眾號:deepstack   歡迎一起交流 背景:在業務中,出現方法執行失敗需要重試的場景很多,如網路抖動導致的連線失敗或者超市等。 優雅實現: 1、減少程式碼侵入 2、方便可用 3、配置靈活 步驟: 1、建立一個annotation。原始碼如

利用 Spring Aop 動態維護多資料來源

一、回顧AOP 首先還是回顧下AOP的定義。 在百度百科中看到AOP是這樣的一個定義。在軟體業,AOP為Aspect Oriented Programming的縮寫, 意為:面向切面程式設計,通過預編譯方式和執行期動態代理實現程式功能的統一維護的一種技術。

Spring AOP demo 和獲取被CGLIB代理的物件

本文分為兩部分:1)給出Spring AOP的一個例子(會使用CGLIB代理);2)給出獲取被CGLIB代理的原始物件。 1、Spring AOP Demo 1.1新增maven依賴 <dependency> <groupId>org.sp

利用Charles+Python抓包獲取App資料

之前因為工作需要,所以偶爾瞭解其他App的一些資訊. 雖然有些資訊,肉眼也看得到,但是自己照著打,實在有點累... 所以同事讓我幫忙嘗試抓包. 利用Charles開啟以後. 發現有些json的URL是可以直接開啟. 這種是最舒服的. 並且,手動調整offlet和limi

利用spring aop 處理異常

興趣來了想實現一個異常日誌記錄,將某些方法呼叫錯誤資訊儲存。然後程式繼續丟擲異常,單純記錄流水。 下面簡單記錄使用aop實現,上程式碼吧 記得配置 <!-- 開啟spring aop --&g

Spring AOP攔截Service實現日誌管理(自定義註解的方式)

最近專案中用到AOP方式進行Service操作方法日誌管理,特為之記! 1、先說理論和採用的方法 採用註解的方式,其中包括以下註解:@Aspect(類註解)和@AfterReturning(方法註解),其中需要用的Maven庫如下: "org.aspectj:aspect

利用spring mvc 攔截器 鑑權

1.需求場景 利用攔截器實現使用者登入鑑權 2.專案環境 spring spring mvc mybatis  mysql 3.實現方法 package com.jlc.action; import java.util.Enumeration; import j

利用Spring AOP和redis的鎖來實現防止表單重複提交

表單重複提交是在web中存在的一個很常見,會帶來很多麻煩的一個問題。尤其是在表單新增的時候,如果重複提交了多條一樣的資料,帶來的麻煩更大。 實現防止表單重複提交的方法有前端限制和後臺限制1、前端限制就是當點選了提交按鈕之後,就給按鈕新增屬性disabled,然後等後臺返回提交

Java傳送http POST,GET,獲取返回資料

/** * * @param strUrl * 請求地址 * @param params * 請求引數 * @param method * 請求方法 * @return 網路請

asp.net中GridView內部點選事件判斷是第幾行獲取row資料

前臺:  <asp:GridView ID="grid" runat="server" class="com_table" AutoGenerateColumns="False">  &l

spring aop攔截自定義註解的切入點表示式

@within(com.cxh.study.aop.controller.UserAccessAnnotation) 表示攔截含有com.cxh.study.aop.controller.UserAccessAnnotation這個註解的類中所有方法 @an