SSM框架 基于spring-AOP 实现requet参数日志记录
2017-11-13 10:58
701 查看
SSM框架 基于spring-AOP 实现requet参数日志记录
1.参数类型
from表单提交,可以从request的getParameterMap()获取raw提交(对象类型提交),则得从request的getReade()或getInputStream()
2.添加maven依赖
<dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>${gson.version}</version> </dependency>
3.配置aop切面类RequsetParamsJouranAspect
/** * request 参数日志记录 * @Author: CatalpaFlat * @Descrition: * @Date: Create in 22:24 2017/11/12 * @Modified BY: */ @Aspect @Component public class RequsetParamsJouranAspect { /** * service层切面 */ private final String POINT_CUT = "execution(* com.chen.logic.controller..*(..))"; /** * 日志输出 */ private static final Logger logger = Logger.getLogger(RequsetParamsJouranAspect.class.getName()); @Pointcut(POINT_CUT) private void pointcut() { } @Before(value = "pointcut()") public void before(JoinPoint joinPoint) { RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); ServletRequestAttributes sra = (ServletRequestAttributes) requestAttributes; HttpServletRequest request = sra.getRequest(); Map<String, Object> returnMap = new HashMap<>(); Map<String, String[]> parameterMap = request.getParameterMap(); Iterator entries = parameterMap.entrySet().iterator(); Map.Entry entry; String name; String value = ""; while (entries.hasNext()) { entry = (Map.Entry) entries.next(); name = (String) entry.getKey(); Object valueObj = entry.getValue(); if (null == valueObj) { value = ""; } else if (valueObj instanceof String[]) { String[] values = (String[]) valueObj; for (String v : values) { value = v + ","; } value = value.substring(0, value.length() - 1); } else { value = valueObj.toString(); } returnMap.put(name, value); } JSONObject paramsJson = JSONObject.fromObject(new Gson().toJson(returnMap)); logger.info("paramsJson:"+paramsJson.toString()); Object[] args = joinPoint.getArgs(); JSONArray bodyArray = new JSONArray(); for (Object obj:args){ if (!(obj instanceof HttpServletRequest)&&!isBasicDataType(obj)) bodyArray.add(JSONObject.fromObject(obj)); } logger.info("bodyArray:"+bodyArray.toString()); } /** * 是否为基本数据类型还是自定义对象 * @param obj 参数对象 * @return 是否为基本数据类型还是自定义对象(true/false) */ private boolean isBasicDataType(Object obj){ if (obj instanceof String) return true; if (obj instanceof Boolean) return true; Class<?> aClass = obj.getClass(); return aClass.isPrimitive(); } }
注:
- 当以@RequestBody注解对象时候,以raw格式提交参数,以对象接收,因此只要判断其是否为基本数据类型即可排除参数类型
4.测试
基于:http://blog.csdn.net/dushiwodecuo/article/details/785072964.1.Controller
@PostMapping(value = "getraw") public String getraw(@RequestBody Test test){ return "OK"; } @PostMapping(value = "getParams") public String getParams(@RequestParam String name){ return name; }
4.2.测试调用
相关文章推荐
- 基于Spring AOP和Groovy日志模板配置的日志记录框架的二次实现与使用案例
- 基于SSM利用SpringAOP切面及自定义注解 记录每次操作记录(操作日志 同理)
- 基于xml配置的spring aop 的实现日志 和为通知传递参数
- 从头认识Spring-3.4 简单的AOP日志实现-扩展增加检查订单功能,以便记录并检测输入的参数
- Spring AOP 基于注解的AOP 实现 记录日志,异常捕获
- 从头认识Spring-3.8 简单的AOP日志实现(注解版)-扩展增加检查订单功能,以便记录并检测输入的参数
- 10、SSM框架-Spring AOP之基于注解的声明式AspectJ(10)
- spring aop 实现用户操作日志记录功能
- 从头认识Spring-3.2 简单的AOP日志实现-需要记录方法的运行时间
- Spring AOP实现日志记录
- 采用Spring AOP实现日志记录
- SSM框架项目搭建系列(六)—Spring AOP之基于XML的声明式AspectJ
- spring的AOP实现记录操作日志
- Spring+SpringMVC+Mybatis 利用AOP自定义注解实现可配置日志快照记录
- Spring AOP 实现业务日志记录
- Spring aop Aspect实现Service或Controller日志记录
- 从头认识Spring-3.2 简单的AOP日志实现-需要记录方法的运行时间
- Spring AOP实现复杂的日志记录(自定义注解)
- spring 基于aop 实现日志输出 定义在controller层无效
- Spring AOP 实现业务日志记录 (注解)