Spring AOP 自定义注解获取http接口及WebService接口入参和出参

注解方法实现过程中可以采用如下获取方式:—以下为例

 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

1.定义两个方法注解,分别标记要处理的http接口及Webservice接口:

http接口注解


1

2

3

4

5

@Retention(RetentionPolicy.RUNTIME)

@Target({ ElementType.TYPE, ElementType.METHOD })

public @interface AnnotationForIntfMark {

    String value();

}

WebService接口注解


1

2

3

4

5

@Retention(RetentionPolicy.RUNTIME)

@Target({ ElementType.TYPE, ElementType.METHOD })

public @interface AnnotationForWsMark {

    String value();

}

2.定义Spring AOP切入点,两种接口注解切入点,注意 中间用||,网上也有说明使用or,试过之后发现or后面的切入点无效


1

2

3

@Pointcut("@annotation(ms.platform.base.interfaces.AnnotationForIntfMark) || @annotation(ms.platform.base.interfaces.AnnotationForWsMark)")

    public void pointcut() {

    }

3.环绕式加入切入点


1

2

3

4

5

6

7

8

9

10

@Around("pointcut()")

    public void handle(ProceedingJoinPoint joinPoint) throws Throwable {

        StringBuffer sb = new StringBuffer();

        String reqParam = preHandle(joinPoint);

        sb.append("Input Param:【").append(reqParam).append("】").append("\n");

        Object retVal = joinPoint.proceed();

        String respParam = postHandle(retVal);

        sb.append("Output Param:【").append(respParam).append("】").append("\n");

        MSLog.error(sb.toString());

    }

4.preHandle(joinPoint)获取接口入参,postHandle(retVal)获取接口出参


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

private String preHandle(ProceedingJoinPoint joinPoint) {

        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())

                .getRequest();

        Signature signature = joinPoint.getSignature();

        MethodSignature methodSignature = (MethodSignature) signature;

        Method targetMethod = methodSignature.getMethod();

        Annotation[] annotations = targetMethod.getAnnotations();

        boolean isIntf = false;

        StringBuffer sb = new StringBuffer();

        for (int i = 0; i < annotations.length; i++) {

            if (annotations[i].annotationType().equals(AnnotationForIntfMark.class)) {

                sb.append(request.getAttribute("jsonContent"));

                isIntf = true;

                break;

            }

        }

        if (!isIntf) {

            Object[] args = joinPoint.getArgs();

            for (int j = 0; j < args.length; j++) {

                sb.append(JsonUtil.bean2json(args[j]));

            }

        }

        return sb.toString();

    }


1

2

3

private String postHandle(Object retVal) {

        return JsonUtil.bean2json(retVal);

    }


1

5.切面类定义,注意需要添加@Component,否则将扫描不到切面类


1

2

3

4

5

@Aspect

@Component

public class WebRequestAroundAdvice {

}

原文地址:https://www.cnblogs.com/fan-yuan/p/9054662.html

时间: 2024-08-05 09:05:09

Spring AOP 自定义注解获取http接口及WebService接口入参和出参的相关文章

spring AOP + 自定义注解实现权限控制小例子

今天看了一下黑马程序员的视频,上面讲到一个使用spring AOP + 自定义注解的方式来实现权限控制的一个小例子,个人觉得还是可以借鉴,整理出来与大家分享. 需求:service层有一些方法,这些方法需要不同的权限才能访问. 实现方案:自定义一个PrivilegeInfo的注解,使用这个注解为service层中的方法进行权限配置,在aop中根据PrivilegeInfo注解的值,判断用户是否拥有访问目标方法的权限,有则访问目标方法,没有则给出提示. 关键技术:自定义注解及注解解析,spring

spring AOP自定义注解方式实现日志管理

转:spring AOP自定义注解方式实现日志管理 今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接开始!!! 关于配置我还是的再说一遍. 在applicationContext-mvc.xml中要添加的 <mvc:annotation-driven />     <!-- 激活组件扫描功能,在包com.gcx及其子包下面自动扫描通过注解配置的组件 -->     <conte

(转)利用Spring AOP自定义注解解决日志和签名校验

一.需解决的问题 部分API有签名参数(signature),Passport首先对签名进行校验,校验通过才会执行实现方法. 第一种实现方式(Origin):在需要签名校验的接口里写校验的代码,例如: boolean isValid = accountService.validSignature(appid, signature, client_signature); if (!isValid) return ErrorUtil.buildError(ErrorUtil.ERR_CODE_COM

利用Spring AOP自定义注解解决日志和签名校验

转载:http://www.cnblogs.com/shipengzhi/articles/2716004.html 一.需解决的问题 部分API有签名参数(signature),Passport首先对签名进行校验,校验通过才会执行实现方法. 第一种实现方式(Origin):在需要签名校验的接口里写校验的代码,例如: boolean isValid = accountService.validSignature(appid, signature, client_signature); if (!

spring AOP自定义注解 实现日志管理

今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接开始!!! 关于配置我还是的再说一遍. 在applicationContext-mvc.xml中要添加的 <mvc:annotation-driven />     <!-- 激活组件扫描功能,在包com.gcx及其子包下面自动扫描通过注解配置的组件 -->     <context:component-scan base-pac

使用Spring Aop自定义注解实现自动记录日志

百度加自己琢磨,以下亲测有效,所以写下来记录,也方便自己回顾浏览加深印象之类,有什么问题可以评论一起解决,不完整之处也请大佬指正,一起进步哈哈(1)首先配置文件: <!-- 声明自动为spring容器中配置@aspectj切面的bean创建代理 ,织入切面 --> <aop:aspectj-autoproxy /> <!-- 开启注解扫描 --> <context:component-scan base-package="com.ky.zhjd.**&q

Spring AOP+自定义注解实现缓存

Spring AOP配置: <aop:config> <aop:aspect ref="cacheAdvice"> <aop:pointcut id="cachePointcut" expression="execution(* cn.vobile.service..*.*(..)) and @annotation(cacheable)"/> <aop:around method="cacheD

Spring aop +自定义annotation

Spring aop +自定义注解 一.所需的jar 包: <!-- 导入java ee jar 包 --> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <!--spring ,springmvc--> <

使用Spring处理自定义注解

使用Spring处理自定义注解 本文只讲思想,不讲代码. 可能的两种方法 spring schema spring aop aspect 参考1 dubbo service 包名:com.alibaba.dubbo.config 参考2 spring mvc 包名:org.springframework.web.servlet.config 可以参考这两个的实现,利用schema添加自定义注解并处理自己的注解,注册搜索模块. 源码分析 通过schema添加配置解析如: 在 spring配置文件中