spring aop 实现请求报文打印

利用spring aop 实现前端请求后台的参数打印。

/*
*===============================================================================================
*   author:          time:                             version:           desc:
*   anear           2017/2/26  13:25                      1.0
*===============================================================================================
*/
package com.qianmo.foru.process;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.util.Arrays;

/**
 *
 */
@Component("aspect")
@Aspect
public class ExceptionAspect {
    private Logger logger = LoggerFactory.getLogger(ExceptionAspect.class);

    public ExceptionAspect() {
        logger.info("------------------------>请求报文 拦截[已加载]<------------------------");
    }

    @Around(value = "within(com.qianmo.foru.service.impl.PayServiceImpl)")
    public Object payAspect(ProceedingJoinPoint target) throws Throwable {

        Object answer = null;

//        MethodSignature signature = (MethodSignature) target.getSignature();
//        Method method = signature.getMethod();
//        logger.debug("方法名:" + method.getName());
//        if ("executeNotification".equals(method.getName())) {
//
//            Object[] objects = target.getArgs();
//            HttpServletRequest request = null;
//            for (int i = 0; i < objects.length; i++) {
//                if (objects[i] instanceof HttpServletRequest) {
//                    request = (HttpServletRequest) objects[i];
//                    if (Constants.HTTP_METHOD.post.equalsIgnoreCase(request.getMethod())) {
//                        logger.info("请求报文: {}", HttpUtil.extractPostRequestBody(request));
//                    }
//                } else {
//                    break;
//                }
//            }
//
//
//        }
        logger.info("请求报文: {}", Arrays.toString(target.getArgs()));
        answer = target.proceed();
        return answer;
    }

    @Around(value = "within(com.qianmo.foru.service.impl.RefundServiceImpl)")
    public Object refundAspect(ProceedingJoinPoint target) throws Throwable {
        Object answer = null;
        logger.info("请求报文: {}", Arrays.toString(target.getArgs()));
        answer = target.proceed();
        return answer;
    }

    @Around(value = "within(com.qianmo.foru.service.impl.OrderInfoServiceImpl)")
    public Object orderAspect(ProceedingJoinPoint target) throws Throwable {
        Object answer = null;
        logger.info("请求报文: {}", Arrays.toString(target.getArgs()));
        answer = target.proceed();
        return answer;
    }

}

不想多说,指向serviceImpl,然后在serviceImpl里的方法前加

    @Transactional

加上这个注解,就可以实现了,效果如下:

请求报文: [{"orderFinishStat":"00","logger":{"eventLogger":false,"name":"com.qianmo.foru.bean.request.QueryOrderByAllRequest"}}]
16:59:14.847 [http-bio-8088-exec-14] INFO  com.qianmo.foru.service.impl.OrderInfoServiceImpl - ---------进入查询订单接口----------
时间: 2024-08-05 02:09:55

spring aop 实现请求报文打印的相关文章

AOP 实现请求参数打印

1.编写打印发放 import java.util.Enumeration; import javax.servlet.http.HttpServletRequest; import org.aspectj.lang.JoinPoint; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.context.request.RequestContextHolder; impo

(转)利用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 日志拦截应用

近期,一个小伙伴遇到了此需求.要解决的问题就是: 记录用户在系统的操作,通过注解来灵活控制.  注解可以对方法进行修饰,描述.  后面会将注解上描述以及方法被调用时入参记录到数据库. 同时还需要对不同的操作进行分类(插入,修改,查看,下载/上传文件之类的),记录用户,时间以及IP,客户端User-agent . 我在这里将部分实现写了出来,实际在项目中可以直接参照进行修改就可以满足以上功能. 开发环境:W7 + Tomcat7 + jdk1.7 + Mysql5 框架:spring,spring

Spring AOP的本质

不用再百科什么AOP了,我先推荐几篇文章或者系列文章:(感谢这些博文的原作者) 0.  Spring AOP 详解   http://pandonix.iteye.com/blog/336873/ 1.  AOP技术基础系列     http://wayfarer.cnblogs.com/articles/241024.html 2.  我对AOP的理解 http://jinnianshilongnian.iteye.com/blog/1474325 3.  Spring AOP本质系列  ht

Java动态代理--&gt;Spring AOP

引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓“登高必自卑,涉远必自迩”.以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系列分别介绍这些Java基础知识,希望对大家有所帮助.): [1] Java反射知识-->Spring IoC :http://www.iteye.com/topic/1123081 [2] Java动态代理-->Spring AOP :http://www.iteye.com/topic/1123293 [3] 属性

利用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 之 实战篇

接上一小节彻底征服 Spring AOP 之 理论篇 Spring AOP 实战 看了上面这么多的理论知识, 不知道大家有没有觉得枯燥哈. 不过不要急, 俗话说理论是实践的基础, 对 Spring AOP 有了基本的理论认识后, 我们来看一下下面几个具体的例子吧.下面的几个例子是我在工作中所遇见的比较常用的 Spring AOP 的使用场景, 我精简了很多有干扰我们学习的注意力的细枝末节, 以力求整个例子的简洁性. 下面几个 Demo 的源码都可以在我的 Github 上下载到. HTTP 接口

Spring aop 实例(转)

面向切面编程,有效的降低了代码之间的耦合性,易于维护:例如:我们习惯在代码中加上一些日志信息,在程序出错时方便快速查找找到问题,通常做法是在请求进入方法的时候打印日志,退出前打印日志,还有在出错时打印日志,那么问题就来了,每个方法中都需要打印日志,这些相同的部分就可以当做一个切面,通过配置切点来触发所需要的功能,比如,我需要在请求进入方法的时候打印,即可使用aop当中的前置通知来做到,这样就不需要每个方法中都去写一遍,配置好之后引用即可. 简单的记录一下spring aop的一个示例 基于两种配

浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~

简介 我们都知道,Spring 框架作为后端主流框架之一,最有特点的三部分就是IOC控制反转.依赖注入.以及AOP切面.当然AOP作为一个Spring 的重要组成模块,当然IOC是不依赖于Spring框架的,这就说明你有权选择是否要用AOP来完成一些业务. AOP面向切面编程,通过另一种思考的方式,来弥补面向对象编程OOP当中的不足,OOP当中最重要的单元是类,所以万物皆对象,万物皆是 对象类.而在AOP的模块单元中,最基础的单元是切面,切面对切点进行模块化的管理. 最后再提一句:Spring当