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

连云港做网站哪里好行政单位网站建设立项依据

连云港做网站哪里好,行政单位网站建设立项依据,广东南方通信建设有限公司官方网站,学广告设计好就业吗系列文章 1.SpringBoot整合RabbitMQ并实现消息发送与接收 2. 解析JSON格式参数 修改对象的key 3. VUE整合Echarts实现简单的数据可视化 4. Java中运用BigDecimal对字符串的数值进行加减乘除等操作 5. List#xff1c;HashMap#xff1c;String,String#xff1e; 修改对象的key 3. VUE整合Echarts实现简单的数据可视化 4. Java中运用BigDecimal对字符串的数值进行加减乘除等操作 5. ListHashMapString,String实现自定义字符串排序key排序、Value排序 更多该系列文章可以看我主页哦 目录 系列文章前言一、准备工作二、准备实操2.1、编写一个自己定义的Log注解2.2、编写切面类LogAspect.java2.2.1、定义切面2.2.2、代码编写 总结一下源码展示 前言 说到AOP大家都可以想到他是面向切面的编程它通过将横切关注点例如日志记录、事务管理、权限控制等从主要业务逻辑中分离出来以模块化的方式进行管理。在AOP中通过定义切面Aspect来捕获和处理横切关注点然后将其应用于特定的目标对象或方法。 官方的解释有点抽象我们举个例子说明假设我们需要在多个方法中添加日志记录功能。传统的方式是在每个方法中都添加日志代码但这样会导致代码重复并且当我们需要修改日志记录逻辑时需要逐个修改所有方法。而使用AOP我们只需定义一个切面将日志记录的逻辑写在切面中。然后通过在需要添加日志的地方进行配置就能自动将切面应用到目标方法中实现日志记录的功能。 文章说明 本篇文章主要是使用Aop的环绕通知去实现将每次请求的接口信息操作的模块请求方法请求的url请求的ip入参出参以及耗时进行记录并存到数据库。 一、准备工作 首先我们导入Aop的坐标 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependency因为我们有一些结果要json输出 所以用了fastjson依赖,下面给出xml坐标,当然你也可以喜欢着其他的转json工具 dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion2.0.3/version/dependency二、准备实操 2.1、编写一个自己定义的Log注解 Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documented public interface Log {// 业务类型BusinessType businessType() default BusinessType.OTHER;// 模块名称String title() default ; }模块名称、业务类型等可以根据自己的实际情况去添加和删除 之后我们将注解写在需要记录的方法上面这里是一个简单的分页查询 入参为每页条数和页码出参就是分页的结果 Log(title 分页查询商品,businessType BusinessType.GETAll)GetMapping(/goods/list)public Result pageList(int pageNum,int pageSize,String name , String useage){return Result.success(goodsService.selectPage(pageNum,pageSize,name,useage));}2.2、编写切面类LogAspect.java 2.2.1、定义切面 /*** 定义切面*/Pointcut(annotation(com.example.masks.annotation.Log))public void pt() {}2.2.2、代码编写 我们定义一个环绕切点首先记录当前时间作为切点方法执行前的时间戳使用 pjp.proceed() 执行切点方法之后接着计算切点方法执行的时长并记录日志。这里调用了 handleLog() 方法来处理日志记录它需要传入 pjp、runTime 和 result 三个参数。 /*** 环绕切点* param* return result*/Around(Log())public Object log(ProceedingJoinPoint pjp) throws Throwable {long beginTime System.currentTimeMillis();// 执行切点方法Object result pjp.proceed();// 执行时长Long runTime System.currentTimeMillis() - beginTime;handleLog(pjp,runTime,result);return result;}在 handleLog() 方法中首先获取切点方法的签名和注解信息在从注解中获取模块和业务类型信息, 之后依次获取、请求参数 、 HTTP方法 、 IP地址 和 请求URL 等信息 private void handleLog(ProceedingJoinPoint pjp,Long runTime, Object result) {MethodSignature signature (MethodSignature) pjp.getSignature();Method method signature.getMethod();// 获取注解内容Log logAnnotation method.getAnnotation(Log.class);// 获取模块String title logAnnotation.title();// 获取业务类型BusinessType businessType logAnnotation.businessType();Object[] args pjp.getArgs();// 入参数String params JSON.toJSONString(args);//出参String res JSON.toJSONString(result);// 请求方法String httpMenthod httpServletRequest.getMethod();// ipString ip IPUtils.getIpAddr(httpServletRequest);// 请求urlString requestURL httpServletRequest.getRequestURL().toString();// 封装日志对象SysLog sysLog new SysLog(title, businessType, httpMenthod, requestURL, ip, params, res, runTime);// 这里可以根据自己的需求去处理sysLog可以存储到数据库等储存到数据库的操作就不展示了比较简单我这里就控制台输出一下这一条信息System.out.println(sysLog); 展示一下因为我把日志存储到了数据库、就给大家展示一下数据库的结果 总结一下 总的来说AOP 日志记录是一种实现代码模块化和复用的好方法可以提高代码的可维护性和可读性。在实际开发中我们应该灵活运用 AOP 技术根据实际需求选择合适的切点表达式和日志记录方式并注意日志级别和格式的设置以便更好地记录和分析日志信息。 希望通过本篇文章让大家对Aop有一个更深入的了解尤其是AOP去处理日志的功能是Aop最常见的一个功能我这里只是进行简单的AOP日志功能的运用如果大家有什么更好的方法和对我代码改进的地方请大家积极私信一起努力 源码展示 sysLog.java 封装的实体 public class SysLog {private Long id;/*** 操作模块*/private String title;/*** 业务类型*/private BusinessType businessType;/*** 请求类型*/private String requestMethod;/*** 请求URl*/private String operUrl;/*** 请求IP*/private String operIp;/*** 请求参数*/private String operParam;/*** 出参*/private String resultParam;/*** 消耗时间-ms*/private Long costTime;public SysLog(String title, BusinessType businessType, String requestMethod, String operUrl, String operIp, String operParam,String resultParam, Long costTime) {this.title title;this.businessType businessType;this.requestMethod requestMethod;this.operUrl operUrl;this.operIp operIp;this.operParam operParam;this.resultParam resultParam;this.costTime costTime;}Log注解 Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documented public interface Log {// 业务类型BusinessType businessType() default BusinessType.OTHER;// 模块名称String title() default ; }LogAspect.java 切面类 Aspect Component public class LogAspect {AutowiredHttpServletRequest httpServletRequest;private static final Logger log LoggerFactory.getLogger(LogAspect.class);/*** 定义切面*/Pointcut(annotation(com.xiaoke.annotation.Log))public void pt() {}/*** 环绕切点*/Around(pt())public Object log(ProceedingJoinPoint pjp) throws Throwable {long beginTime System.currentTimeMillis();// 执行切点方法MObject result pjp.proceed();// 执行时长Long runTime System.currentTimeMillis() - beginTime;// 记录日志handleLog(pjp,runTime,result);return result;}private void handleLog(ProceedingJoinPoint pjp,Long runTime, Object result) {MethodSignature signature (MethodSignature) pjp.getSignature();Method method signature.getMethod();// 获取注解内容Log logAnnotation method.getAnnotation(Log.class);// 获取模块String title logAnnotation.title();// 获取业务类型BusinessType businessType logAnnotation.businessType();Object[] args pjp.getArgs();// 入参数String params JSON.toJSONString(args);//出参String res JSON.toJSONString(result);// 请求方法String httpMenthod httpServletRequest.getMethod();// ipString ip IPUtils.getIpAddr(httpServletRequest);// 请求urlString requestURL httpServletRequest.getRequestURL().toString();// 封装日志对象SysLog sysLog new SysLog(title, businessType, httpMenthod, requestURL, ip, params, res, runTime);// 这里可以根据自己的需求去处理sysLog可以存储到数据库等储存到数据库的操作就不展示了比较简单我这里就控制台输出一下这一条信息System.out.println(sysLog);} }下面是俩个工具类百度可以搜索到 这里也给出源码 BusinessType.java 这是一个枚举 /*** Description 业务操作类型*/ public enum BusinessType {/*** 其它*/OTHER,/*** 新增*/INSERT,/*** 修改*/UPDATE,/*** 删除*/DELETE,/*** 授权*/GRANT, }IPutils.java 这个主要是获取ip import org.springframework.util.StringUtils;import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.UnknownHostException;public class IPUtils {private static final String IP_UTILS_FLAG ,;private static final String UNKNOWN unknown;private static final String LOCALHOST_IP 0:0:0:0:0:0:0:1;private static final String LOCALHOST_IP1 127.0.0.1;/*** 获取IP地址* p* 使用Nginx等反向代理软件 则不能通过request.getRemoteAddr()获取IP地址* 如果使用了多级反向代理的话X-Forwarded-For的值并不止一个而是一串IP地址X-Forwarded-For中第一个非unknown的有效IP字符串则为真实IP地址*/public static String getIpAddr(HttpServletRequest request) {String ip null;try {//以下两个获取在k8s中将真实的客户端IP放到了x-Original-Forwarded-For。而将WAF的回源地址放到了 x-Forwarded-For了。ip request.getHeader(X-Original-Forwarded-For);if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {ip request.getHeader(X-Forwarded-For);}//获取nginx等代理的ipif (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {ip request.getHeader(x-forwarded-for);}if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {ip request.getHeader(Proxy-Client-IP);}if (StringUtils.isEmpty(ip) || ip.length() 0 || UNKNOWN.equalsIgnoreCase(ip)) {ip request.getHeader(WL-Proxy-Client-IP);}if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {ip request.getHeader(HTTP_CLIENT_IP);}if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {ip request.getHeader(HTTP_X_FORWARDED_FOR);}//兼容k8s集群获取ipif (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {ip request.getRemoteAddr();if (LOCALHOST_IP1.equalsIgnoreCase(ip) || LOCALHOST_IP.equalsIgnoreCase(ip)) {//根据网卡取本机配置的IPInetAddress iNet null;try {iNet InetAddress.getLocalHost();} catch (UnknownHostException e) {System.out.println();System.out.println(getClientIp errore.getMessage());}assert iNet ! null;ip iNet.getHostAddress();}}} catch (Exception e) {System.out.println(IPUtils ERRORe.getMessage());}//使用代理则获取第一个IP地址if (!StringUtils.isEmpty(ip) ip.indexOf(IP_UTILS_FLAG) 0) {ip ip.substring(0, ip.indexOf(IP_UTILS_FLAG));}return ip;} }以上就是全部源码了 有兴趣的朋友可以观看我其他的文章和私信我哦
http://wiki.neutronadmin.com/news/5986/

相关文章:

  • 外贸平台自建站标智客logo设计免费生成
  • 佛山网站建设公司有哪些兼职做设计的网站
  • 怎么编辑网站源代码如何登录qq网页版
  • 网站建设策划包括哪些内容seo在线诊断工具
  • 企业英文网站建设宿州专业网站建设公司
  • 电子商务网站建设试题3鞍山招聘网最新招聘
  • 漂亮的蓝色网站网上做兼职网站有哪些工作
  • 加强医院网站建设图派科技做网站怎么样
  • 竹子建站教程手工活外包加工网
  • 手机网站支持微信支付吗推广网站名是什么
  • 遂宁做网站ps网页设计视频教程
  • 在小网站上做点击广告手机网站 自适应屏幕
  • 可以自己做网站这么做做网站jijianjianzhan
  • 文化传媒公司能否建设经营网站茂名网站建设公司
  • 做笑话网站钱包网站建设
  • 广东外贸网站建设企业盘锦做网站价格
  • 网站前置审批怎么做手机移动端网站
  • 国外主题网站济南正宗网站建设平台
  • 学做花蛤的网站网站架构基本知识
  • 怎么创建网站详细流程网站开发 改进
  • joomla 企业网站模板河南平台网站建设价位
  • 网站如何做移动网站服务好质量好的网站制作
  • 青岛胶东建设国际机场网站photoshop正版软件多少钱
  • 做网站需要招什么职位东山网站建设
  • 磁力链接 网站怎么做的搜狐视频
  • 网站建设的有什么需求江苏省造价信息工程网
  • 如何建设和优化一个网站步骤中山网站建设开发
  • 湖北建设厅政务网站app免费版下载安装
  • 树莓派做网站什么是网络营销?与电商营销有什么区别?
  • 网站优化细节网站建设项目推文