注意:这种方式需要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.具体代码:


  1. import org.apache.commons.lang3.ArrayUtils;
  2. import org.aspectj.lang.ProceedingJoinPoint;
  3. import org.aspectj.lang.Signature;
  4. import org.aspectj.lang.annotation.Around;
  5. import org.aspectj.lang.annotation.Aspect;
  6. import org.aspectj.lang.reflect.MethodSignature;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. /**
  10. * 请求参数拦截校验
  11. */
  12. @Aspect
  13. public class AopParamVerify {
  14. private static Logger log = LoggerFactory.getLogger(AopParamVerify.class);
  15. @Around(value = "execution(* com.website.controller..*.*(..))")
  16. public Object invoke(ProceedingJoinPoint joinPoint) {
  17. /**
  18. * 时间戳校验,超过一分钟,拦截
  19. */
  20. //返回结果封装类
  21. HzlqswReqResult rst = new HzlqswReqResult();
  22. //1.这里获取到所有的参数值的数组
  23. Object[] args = joinPoint.getArgs();
  24. Signature signature = joinPoint.getSignature();
  25. MethodSignature methodSignature = (MethodSignature) signature;
  26. //2.最关键的一步:通过这获取到方法的所有参数名称的字符串数组
  27. String[] parameterNames = methodSignature.getParameterNames();
  28. try {
  29. //3.通过你需要获取的参数名称的下标获取到对应的值
  30. int timeStampIndex = ArrayUtils.indexOf(parameterNames, "timeStamp");
  31. if (timeStampIndex != -1) {
  32. long timeStamp = (Long) args[timeStampIndex];
  33. if (System.currentTimeMillis() - timeStamp > 60000) {
  34. rst.setResultCode(rst.resultCode_hashCode_overdue);
  35. rst.setReturnMsg("时间戳过期");
  36. rst.setReturnObject("时间戳过期");
  37. return rst;
  38. }
  39. }
  40. return joinPoint.proceed();
  41. } catch (Throwable throwable) {
  42. log.error("时间戳校验异常");
  43. throwable.printStackTrace();
  44. rst.setResultCode(rst.resultCode_error);
  45. rst.setReturnMsg("AOP校验异常");
  46. rst.setReturnObject("AOP校验异常");
  47. return rst;
  48. }
  49. }
  50. }

3.效果:

Spring AOP获取拦截方法的参数名称跟参数值的更多相关文章

  1. Spring AOP获取方法的参数名称和参数值

    aop配置: <aop:aspectj-autoproxy expose-proxy="true" /> @Before(value = "execution ...

  2. 学习spring第6天(aop获取目标方法参数)

    关于<aop:around>中的方法,需要第一个参数为ProceedJoinPoint,在方法体中通过该参数调用proceed()才能使目标方法得到调用. 当一个切面中有多个<aop ...

  3. spring aop获取目标对象的方法对象(包括方法上的注解)

    这两天在学习权限控制模块.以前看过传智播客黎活明老师的巴巴运动网视频教程,里面就讲到权限控制的解决方案,当时也只是看看视频,没有动手实践,虽说看过几遍,可是对于系统中的权限控制还是很迷茫,所以借着这次 ...

  4. 基于 Annotation 拦截的 Spring AOP 权限验证方法

    基于 Annotation 拦截的 Spring AOP 权限验证方法 转自:http://www.ibm.com/developerworks/cn/java/j-lo-springaopfilte ...

  5. Spring AOP获取不了增强类(额外方法)或无法通过getBean()获取对象

    Spring AOP获取不了增强类(额外方法)和无法通过getBean()获取对象 今天在学习AOP发现一个小问题 Spring AOP获取不了额外方法,左思右想发现是接口上出了问题 先上代码 获取不 ...

  6. Spring实战(十)Spring AOP应用——为方法引入新功能、为对象引入新方法

    切面最基本的元素是通知和切点,切点用于准确定位应该在什么地方应用切面的通知. 1.Spring借助AspectJ的切点表达式语言来定义Spring切面 在Spring中,要使用AspectJ的切点表达 ...

  7. Spring AOP不拦截从对象内部调用的方法原因

    拦截器的实现原理很简单,就是动态代理,实现AOP机制.当外部调用被拦截bean的拦截方法时,可以选择在拦截之前或者之后等条件执行拦截方法之外的逻辑,比如特殊权限验证,参数修正等操作. 但是最近在项目中 ...

  8. Aop实现拦截方法参数

    对于spring框架来说,最重要的两大特性就是AOP 和IOC. 以前一直都知道有这两个东西,在平时做的项目中也常常会涉及到这两块,像spring的事务管理什么的,在看了些源码后,才知道原来事务管理也 ...

  9. Spring.net 间接调用被AOP拦截的方法失效(无法进入aop的拦截方法)

    .下面的tx要定义 <objects xmlns="http://www.springframework.net" xmlns:db="http://www.spr ...

随机推荐

  1. php中静态方法和静态属性的介绍

    静态分为两个部分:静态属性和静态方法 静态的东西都是给类用的(包括类常量),非静态的都是给对象用的 静态属性 在定义属性的时候,使用关键字static修饰的属性称之为静态属性. 静态方法 使用stat ...

  2. bzoj1150 堆应用,好题

    #include<bits/stdc++.h> using namespace std; #define maxn 100005 #define INF 0x3fffffff #defin ...

  3. NodeJS学习:搭建私有NPM

    工具 verdaccio nrm pm2 特点 verdaccio 的特点: 不同步拉取npm库,占据大量硬盘,没有硬盘被撑爆的问题: 安装配置极其简单,不需要数据库: 支持配置上游registry配 ...

  4. poj 3461 (模式串T在主串S中出现的次数)

    求模式串在主串中出现的次数Sample Input 3BAPCBAPCAZAAZAZAZAVERDIAVERDXIVYERDIANSample Output 130 #include <iost ...

  5. asp.net core日志组件

    日志介绍 Logging的使用 1. appsettings.json中Logging的介绍 Logging的配置信息是保存在appsettings.json配置文件中的.因为之前介绍配置文件的时候我 ...

  6. 【Java】 剑指offer(37) 序列化二叉树

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请实现两个函数,分别用来序列化和反序列化二叉树. 思路 一般情况下 ...

  7. MyEclipse里面如何把偏好设置导出

    长时间使用Myeclipse,里面快捷键和代码风格以及其它设置都用习惯了,一旦需要重新安装,再次配置起来 就会很浪费时间,这里我们可以将自己的配置风格保留下来,下次重新安装时直接导入就可以了,不用再重 ...

  8. linux centOS服务器部署ssh,免密码登陆linux

    登陆centos,切换用户,切换到你要免密码登陆的用户,进入到家目录 2 创建钥匙, [xun@jzlinux ~]$ ssh-keygen -t rsa Generating public/priv ...

  9. macos 下通过sublime text 3 + gosublime+sublimegdb 开发注意事项

    1.macos系统10.13.4下 安装gdb8.0可以正常调试,而gdb8.1不能正常调试,需要跳过这个坑 2.需要对gdb 8.0进行软件签名 3.通过gosublime 运行(cmd+b),添加 ...

  10. POJ 2437 Muddy roads【贪心】(区间覆盖)

    题目链接:https://vjudge.net/contest/194475#problem/C 题目大意: 有n滩泥 木板长度为L 求至少需要多少木板才能覆盖这些泥 解题思路: 把泥块的起点升序排序 ...