当前位置: 首页 > news >正文

成都网站推广营销微信wordpress清理主题

成都网站推广营销微信,wordpress清理主题,免费装修设计图,苏州网站制作设计项目中遇到多个模块需要打印Controller请求日志#xff0c;在每个模块里面加AOP并且配置单独的切面笔者认为代码冗余#xff0c;于是乎就打算把AOP日志打印抽离成一个公共模块#xff0c;谁想用就引入Maven坐标就行。 定义公共AOP模块 并编写AOP工具 AOP模块pom.xml如下 在每个模块里面加AOP并且配置单独的切面笔者认为代码冗余于是乎就打算把AOP日志打印抽离成一个公共模块谁想用就引入Maven坐标就行。 定义公共AOP模块 并编写AOP工具 AOP模块pom.xml如下 ?xml version1.0 encodingUTF-8? project xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlnshttp://maven.apache.org/POM/4.0.0xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparent这里根据自己需要引入 公共AOP父模块/parentmodelVersion4.0.0/modelVersionartifactIdxx-common-aop/artifactIddescriptionxx-common-aop切面/descriptiondependencies!-- Lombok --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency!-- SLF4J --dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-bootstrap/artifactId/dependency!-- FastJSON --dependencygroupIdcom.alibaba.fastjson2/groupIdartifactIdfastjson2/artifactId/dependency!-- Hutool --dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactId/dependencydependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency/dependencies/project AOP核心代码 import cn.hutool.extra.servlet.ServletUtil; import com.alibaba.fastjson2.JSON; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.annotation.*; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest; import java.util.*;/*** 类名称: ServiceLogAop * 类描述: api入参, 出参打印*/ Aspect Component Slf4j public class ServiceLogAop {/*** 换行符*/private static final String LINE_SEPARATOR System.lineSeparator();/*** 以自定义 ServiceLogAop 注解为切点*/Pointcut(execution(public * com.*.*.controller.*.*(..)))public void webLog() {}//基本类型定义用于判断请求参数的类型private static List typeList new ArrayList();private static String[] types {java.lang.Integer, java.lang.Double,java.lang.Float, java.lang.Long, java.lang.Short,java.lang.Byte, java.lang.Boolean, java.lang.Char,java.lang.String, int, double, long, short, byte,boolean, char, float};static {for (int i 0; i types.length; i) {typeList.add(types[i]);}}/*** 在切点之前织入** param joinPoint* throws Throwable*/Before(webLog())public void doBefore(JoinPoint joinPoint) {// 开始打印请求日志ServletRequestAttributes attributes (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request attributes.getRequest();// 获取 WebLog 注解的描述信息// 打印请求相关参数log.info( Start );// 打印请求 urllog.info(URL : {}, request.getRequestURL().toString());//uriString uri request.getRequestURI();log.info(URI : {}, uri);// 打印 Http methodlog.info(HTTP Method : {}, request.getMethod());// 打印调用 controller 的全路径以及执行方法log.info(Class Method : {}.{}, joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName());//IPlog.info(IP : {}, request.getRemoteAddr());// 打印请求的 IPlog.info(IP : {}, ServletUtil.getClientIP(request));//TokenString authorization request.getHeader(Authorization);log.info(Authorization : {}, authorization); /* //cokieString Cookie request.getHeader(Cookie);log.info(Cookie : {}, Cookie);*///User-AgentString userAgent request.getHeader(User-Agent);log.info(User-Agent : {}, userAgent);StringBuffer requestParam new StringBuffer();//参数EnumerationString paramter request.getParameterNames();while (paramter.hasMoreElements()) {String str (String) paramter.nextElement();String strValue request.getParameter(str);requestParam.append(str strValue );}log.info(Form请求参数 : {}, requestParam.toString());// 打印请求入参// log.info(Json请求参数 : {}, JSONUtil.toJsonStr(joinPoint.getArgs()));Signature signature joinPoint.getSignature();MethodSignature methodSignature (MethodSignature) signature;// 通过这获取到方法的所有参数名称的字符串数组String[] parameterNames methodSignature.getParameterNames();//获取到所有参数的NAMEObject[] args joinPoint.getArgs(); //获取到所有参数的VALUEStringBuilder sb new StringBuilder();Map paramMap new HashMap();if (parameterNames ! null parameterNames.length 0 args ! null args.length 0) {for (int i 0; i parameterNames.length; i) {//考虑入参要么为基础类型参数要么为对象类型。以下方法都适合解析出来if (typeList.contains(args[i].getClass().getTypeName())) {//基本数据类型paramMap.put(parameterNames[i], JSON.toJSONString(args[i]));} else {//实体类paramMap JSON.parseObject(JSON.toJSONString(args[i]));}}}log.info(FormAndJsonPram: paramMap.toString());}/*** 在切点之后织入** throws Throwable*/After(webLog())public void doAfter() {// 接口结束后换行方便分割查看log.info( End LINE_SEPARATOR);}/*** 环绕** param proceedingJoinPoint* return* throws Throwable*/Around(webLog())public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {long startTime System.currentTimeMillis();Object result proceedingJoinPoint.proceed();// 打印出参// log.info(Response Args : {}, JSONUtil.toJsonStr(result));// 执行耗时log.info(Time-Consuming : {} ms, System.currentTimeMillis() - startTime);return result;}} Pointcut(“execution(public * com.ruoyi..controller..*(…))”) 作为AOP切入口 此切入口必须为静态常量 不能为动态参数 所以说从yml读取切入点是干不成。 但 Pointcut 可以同时配置多个参数 这个就可以解决多个不同路径下面的Controller都能被切入进来。 Pointcut(execution(* xx.xx.xxx.xx.*.save*(..)) ||execution(* xx.xx.xx.*.delete*(..)) ||execution(* xx.xx.xx..*.update*(..))) 子模块 使用需要引入公共AOP模块maven 创建图片中目录文件 并引入公共模块定义好的ServiceLogAop ( 这里也可以通过 Bean方式把ServiceLogAop 注册进来 ) 效果
http://www.w-s-a.com/news/373729/

相关文章:

  • 山西省住房和城乡建设厅网站报名wordpress添加标签插件
  • 网站怎么自己做外贸网站案例
  • 做网站的优势公司网站怎么做站外链接
  • 海城网站制作建设精准营销的营销方式
  • 北京短视频拍摄公司重庆网站seo推广公司
  • 广州免费推广网站建设4399网页游戏大全
  • 网站的构架与组成建站公司兴田德润
  • php网站部署步骤邯郸哪有做网站的
  • 做设计什么设计比较好的网站南充市住房和城乡建设局考试网站
  • 郑州做系统集成的公司网站龙岩
  • 厦门SEO_厦门网站建设网络营销课程视频
  • vs 2015 网站开发开网店在线咨询
  • 前端如何优化网站性能大学学校类网站设计
  • 中国铁路建设投资公司网站熊学军中国it外包公司排名前50
  • 房产网站的建设广州推广排名
  • 湟源县网站建设wordpress删除未分类
  • 营销型网站开发推广厦门百度seo公司
  • 遵义网站开发培训上海中高风险地区名单最新
  • 禹州市门户网站建设做网站可以申请个体户么
  • 大良营销网站建设效果彩票网站搭建 做网站
  • 做网站的公司为什么人少了在中国如何推广外贸平台
  • 盘锦网站制作工业电商网站怎么配色
  • 白云企业网站建设seo排名点击软件
  • wordpress跨站脚本攻击漏洞国外注册的域名国内能用吗
  • 西部数码网站管理助手2工信部资质查询网站
  • 公司网站哪个建的好吉林网站制作
  • 视频网站怎么引流wordpress私人玩物
  • 我的家乡湛江网站设计新钥匙网站建设
  • 辽宁网站推广爱前端wordpress5.0.3主题
  • python怎么做网站贵阳网站制作