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

cms建站模板app重庆网站建设技术外包

cms建站模板app,重庆网站建设技术外包,东道设计官网,建设一个旅游电子商务网站需求分析 在SpringBoot系统中,一般会对访问系统的请求做日志记录的需求,确保系统的安全维护以及查看接口的调用情况,可以使用AOP对controller层的接口进行增强,作日志记录。日志保存在数据库当中,为了避免影响接口的响…

需求分析

在SpringBoot系统中,一般会对访问系统的请求做日志记录的需求,确保系统的安全维护以及查看接口的调用情况,可以使用AOP对controller层的接口进行增强,作日志记录。日志保存在数据库当中,为了避免影响接口的响应,降低用户体验度,采用异步的方式记录日志,避免日志记录阻塞接口请求

实现原理

通过定义AOP切面,访问接口之前,使用前置通知记录一些有用的数据,如ip地址、请求方式、操作人等等,接口执行完之后使用后置通知记录本次请求执行的实践、执行结果等等信息。
在这里插入图片描述

实现代码

AOP日志切面

定义切点表达式指向Controller的所有方法,即指向所有接口

/*** @Description 日志切面类*/
@Aspect
@Component
public class SysLogAspect {@AutowiredSysLogDao sysLogDao;/*** 开始时间*/private Long startTime;/*** ip*/private String ip;/*** 请求接口名*/private String interfaceName;/*** 请求方式*/private String methodWays;/*** 请求方法路径*/private String requestMethodUrl;/*** 请求类方法参数*/private String requestArgs;//声明切点@Pointcut("execution(public * com.*.*.controller.*.*(..)) || execution(public * com.*.controller.*.*(..))"private void aspect() {}@Before("aspect()")public void before(JoinPoint joinPoint) throws NoSuchMethodException {//开始访问的时间startTime = System.currentTimeMillis();ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = requestAttributes.getRequest();//获取请求ipip = request.getRemoteAddr();//获取请求方法名interfaceName = request.getRequestURI();//获取请求方式methodWays = request.getMethod();//获取请求方法地址requestMethodUrl = joinPoint.getSignature().toString();//获取请求参数requestArgs = Arrays.toString(joinPoint.getArgs());}@AfterReturning(pointcut = "aspect()")public void methodAfterReturning() {Long endTime = System.currentTimeMillis();//执行时长Double time = (endTime - startTime) / 1000.0;SysLog sysLog = new SysLog();//获取当前用户Subject currentUser = SecurityUtils.getSubject();UserLoginInfo subject = (UserLoginInfo) currentUser.getPrincipal();if (!ObjectUtils.isEmpty(subject)) {//用户名sysLog.setUserName(subject.getUserName());}//用户操作switch (methodWays) {case "GET":sysLog.setOperation(BusinessType.SELECT.getValue());break;case "POST":sysLog.setOperation(BusinessType.INSERT.getValue());break;case "PUT":sysLog.setOperation(BusinessType.UPDATE.getValue());break;case "DELETE":sysLog.setOperation(BusinessType.DELETE.getValue());break;}//请求IPsysLog.setIp(ip);//请求类方法参数sysLog.setParams(requestArgs);//执行时长sysLog.setTime(time.toString());//请求方法路径sysLog.setMethod(requestMethodUrl);//入库时间String createTime = DateTimeUtils.getNowDateTime();sysLog.setCreateTime(createTime);//获取系统接口路径信息列表List<ApiInfo> apiInfos = sysLogDao.selectApiInfos();for (ApiInfo apiInfo : apiInfos) {//调用接口路径与接口信息列表进行匹配if (apiInfo.getApiName().equals(interfaceName)) {//菜单模块sysLog.setMenuModel(apiInfo.getMenuOperation());break;}}//异步新增日志AsyncManager.me().execute(AsyncFactory.recordOper(sysLog));}
}

异步任务管理器(线程池)

定义一个单例的异步任务管理器,使用线程池完成异步操作

/*** @description: 异步任务管理器**/
public class AsyncManager {/*** 操作延迟10毫秒*/private final int OPERATE_DELAY_TIME = 10;/*** 异步操作任务调度线程池*/private ScheduledExecutorService executor = SpringUtils.getBean("scheduledExecutorService");/*** 单例模式*/private AsyncManager(){}private static AsyncManager me = new AsyncManager();public static AsyncManager me(){return me;}/*** 执行任务** @param task 任务*/public void execute(TimerTask task){executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS);}/*** 停止任务线程池*/public void shutdown(){ThreadsUtil.shutdownAndAwaitTermination(executor);}
}

异步工厂

这里定义异步工厂去创建日记记录的任务,同时也方便系统扩展其他的异步操作

public class AsyncFactory {/*** 操作日志记录** @param operLog 操作日志信息* @return 任务task*/public static TimerTask recordOper(final SysLog operLog) {return new TimerTask() {@Overridepublic void run() {// 远程查询操作地点SpringUtils.getBean(SysLogService.class).addSysLogInfo(operLog);}};}}

文章转载自:

http://4UWHXEso.mtmnk.cn
http://UG56OlwL.mtmnk.cn
http://atGf3cz9.mtmnk.cn
http://Hc0XT49S.mtmnk.cn
http://hwpGVEy1.mtmnk.cn
http://FedxDIwg.mtmnk.cn
http://YdOOdjFD.mtmnk.cn
http://AMiookdZ.mtmnk.cn
http://F2EHv54g.mtmnk.cn
http://GYrpnMyy.mtmnk.cn
http://8ASqckwF.mtmnk.cn
http://KIcsYUb2.mtmnk.cn
http://dkGCGSuf.mtmnk.cn
http://dnKEFNJo.mtmnk.cn
http://tYu1RTf2.mtmnk.cn
http://3dbCZOvQ.mtmnk.cn
http://Lp1jzfUJ.mtmnk.cn
http://eJSAZXSe.mtmnk.cn
http://4VlQ8WnX.mtmnk.cn
http://tuMgQBUy.mtmnk.cn
http://E0NvubuH.mtmnk.cn
http://UXHGmqj3.mtmnk.cn
http://8kCsYXSR.mtmnk.cn
http://a6ArXNqY.mtmnk.cn
http://lLJ2HNl6.mtmnk.cn
http://cqKcRlRu.mtmnk.cn
http://Wxu8DcEM.mtmnk.cn
http://l6e19P59.mtmnk.cn
http://GRM2duuA.mtmnk.cn
http://5Ycq11zG.mtmnk.cn
http://www.dtcms.com/wzjs/672248.html

相关文章:

  • 商派商城网站建设二次开发做网站和网络推广
  • 手机网站制作哪家公司好深入浅出wordpress pdf
  • 网站建设原则乔拓云网微信小程序制作
  • 成都网站seo网站制作 电子商城
  • 河北网站建设模板互联网推广公司
  • 做网站数据库坏了网站设计行业前景
  • 网站建设专员一定要会网站建设吗做一款app需要网站吗
  • php网站开发项目经验如何写做网站空间多大
  • 济南做外贸网站的公司网架公司名字推荐大全
  • 网站注册商是什么电商网站建设可行性分析
  • 杭州开发区建设局网站做任务的奖金网站
  • jsp 淘宝网站验证码 设计经典企业网站
  • python购物网站开发流程网站建设与开发的软件
  • 有没有可以做游戏的网站卖东西专业网站网上
  • 指示灯具网站建设wordpress footer 修改
  • 湘潭网站建设 要上磐石网络官网最新版cmsv6
  • 模板网站会员阿里云如何购买域名
  • 广州家居网站设计wordpress屏蔽蜘蛛爬虫
  • 视频网站开发的难点寮步镇网站仿做
  • 咸阳网站建设seo烟台做网站哪家好
  • 石家庄pc端网站开发现在个人做网站还能盈利
  • 网站开发实习过程html静态网页作业成品
  • 公司网站制作机构郑州网站推广专员
  • 云南省中国建设工程造价管理协会网站公司邮箱地址
  • ps做网站72分辨率收录查询 站长工具
  • 网站制作公司咨询服务外包企业有哪些
  • 中国建设银行官方网站登录大连网站设计费用
  • 没备案的网站百度收录潮品服饰网站建设规划书
  • 昆明做个人网站小程序名称大全
  • 网站开发数据如何转化沧州海外网站建设