Spring AOP獲取攔截方法的參數名稱跟參數值


注意:這種方式需要JDK1.8版本支持


 

開始:http://www.cnblogs.com/wing7319/p/9592184.html

1.aop配置: <aop:aspectj-autoproxy expose-proxy="true" />

  • 注意該配置需要配置在spring mvc的配置文件中,因為需要攔截controller層方法
  • 或者在必須要配置在spring配置文件中的情況下,同時需要攔截controller層的方法,可以在spring配置文件中加入controller層的包掃描

2.具體代碼:


import org.apache.commons.lang3.ArrayUtils; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 請求參數攔截校驗 */ @Aspect public class AopParamVerify { private static Logger log = LoggerFactory.getLogger(AopParamVerify.class); @Around(value = "execution(* com.website.controller..*.*(..))") public Object invoke(ProceedingJoinPoint joinPoint) { /** * 時間戳校驗,超過一分鍾,攔截 */ //返回結果封裝類 HzlqswReqResult rst = new HzlqswReqResult(); //1.這里獲取到所有的參數值的數組 Object[] args = joinPoint.getArgs(); Signature signature = joinPoint.getSignature(); MethodSignature methodSignature = (MethodSignature) signature; //2.最關鍵的一步:通過這獲取到方法的所有參數名稱的字符串數組 String[] parameterNames = methodSignature.getParameterNames(); try { //3.通過你需要獲取的參數名稱的下標獲取到對應的值 int timeStampIndex = ArrayUtils.indexOf(parameterNames, "timeStamp"); if (timeStampIndex != -1) { long timeStamp = (Long) args[timeStampIndex]; if (System.currentTimeMillis() - timeStamp > 60000) { rst.setResultCode(rst.resultCode_hashCode_overdue); rst.setReturnMsg("時間戳過期"); rst.setReturnObject("時間戳過期"); return rst; } } return joinPoint.proceed(); } catch (Throwable throwable) { log.error("時間戳校驗異常"); throwable.printStackTrace(); rst.setResultCode(rst.resultCode_error); rst.setReturnMsg("AOP校驗異常"); rst.setReturnObject("AOP校驗異常"); return rst; } } }

3.效果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM