SSM框架 基于spring-AOP 实现requet参数日志记录
来源:互联网 发布:经典相声 知乎 编辑:程序博客网 时间:2024/06/08 06:28
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@Componentpublic 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/78507296
4.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.测试调用
阅读全文
1 0
- SSM框架 基于spring-AOP 实现requet参数日志记录
- 基于Spring AOP和Groovy日志模板配置的日志记录框架的二次实现与使用案例
- Spring AOP实现日志记录
- Spring AOP实现日志记录
- Spring AOP 实现业务日志记录
- spring的AOP实现记录操作日志
- 采用Spring AOP实现日志记录
- Spring AOP 实现业务日志记录
- Spring AOP实现系统日志记录
- Spring AOP 实现业务日志记录
- Spring AOP 实现系统操作日志记录
- spring aop自定义注解实现日志记录
- Spring AOP实现系统日志记录
- Spring AOP 实现系统操作日志记录
- Spring Aop实现简单日志记录
- spring aop 实现系统日志的记录
- spring aop 实现操作日志记录
- Spring AOP实现统一日志打印框架
- Android开发之漫漫长途 Ⅴ——Activity的显示之ViewRootImpl的PreMeasure、WindowLayout、EndMeasure、Layout、Draw
- thinkpad w10系统Fn+F5调节桌面亮度无效
- junit注解无提示且报错
- 帮我修改这个代码 我想用函数输入输出结构体 但是自己不会
- 协成开源LoRa闪耀中国物联网大会 成传统转型物联网的中流砥柱
- SSM框架 基于spring-AOP 实现requet参数日志记录
- 什么东西可以做中间件?
- Http协议详解
- fork创建子进程利用pipe管道通信
- piwik统计单页面
- Shiro和spring的整合之基础篇
- WIFI列表仅显示已连接WIFI的问题解决
- java调用redis的八种方式
- 正则使用从0开始学习(一)