Spring Aop根据参数名称获取参数的值(JoinPoint根据参数名获取参数的值)

时间:2025-03-23 16:17:35
import .; import .; import ; import ; import ; import ; import ; import ; import ; @Aspect @Component public class AuthAspect { /** * 包及子包下的所有类的所有方法使用aop * 下的list方法不使用aop */ @Pointcut(value = "execution(* ..*.*(..)) && !execution(* (..))") public void sdkAuth() { } /** * 案例:通过aop控制公共参数的校验 * 1.针对下面的接口,使用@RequestParam注解,不管是get/post请求,都是有效的 * #getParameter,调用接口时的参数为appId=xxx或者groupAppId=xxx,使用getParameter("appId");都可以获取到,但getParameter("groupAppId")只可以获取到groupAppId=xxx * 3.在通知中,是针对方法列表中的参数名,而非注解指定的参数名 * public Object list(String accessToken, @RequestParam("appId") String groupAppId, String subGroupAppId) {} * * @param joinPoint * @return */ @Around("sdkAuth()") public Object doAround(ProceedingJoinPoint joinPoint) { MethodSignature methodSignature = (MethodSignature) (); String[] parameterNames = (); // 获取accessToken的下表 int accessTokenIndex = (parameterNames, "accessToken"); // 获取groupAppId的下标 int groupAppIdIndex = (parameterNames, "groupAppId"); // 获取subGroupAppId的下标 int subGroupAppIdIndex = (parameterNames, "subGroupAppId"); if (accessTokenIndex == -1 || groupAppIdIndex == -1 || subGroupAppIdIndex == -1) { return "error"; } /** * 方法参数的值,返回的数组按照方法定义的顺序,对于null值的,在debug时,不会显示null的数组下标,例如: * public Object list(String accessToken, @RequestParam("appId") String groupAppId, String subGroupAppId) {} * 传参:accessToken=xxx&subGroupAppId=xxx * Object[] args = ();获取的值,在debug时 * args[0] = xxx * args[2] = xxx * 对于args[1],虽然debug时没有显示这个变量,但实际上它是存在的,值为null */ Object[] args = (); String accessToken = (args[accessTokenIndex]); String groupAppId = (args[groupAppIdIndex]); String subGroupAppId = (args[subGroupAppIdIndex]); if ((accessToken, "null") || (groupAppId, "null") || (subGroupAppId, "null")) { return "error"; } try { return (); } catch (Throwable e) { return "success"; } } }