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

discuz做网站赚钱经历wordpress 漏洞复现

discuz做网站赚钱经历,wordpress 漏洞复现,wordpress前台显示作者角色,dw个人主页模板1. 使用redisson完成延迟队列的功能 引入依赖 spring-boot-starter-actuator是Spring Boot提供的一个用于监控和管理应用程序的模块 用于查看应用程序的健康状况、审计信息、指标和其他有用的信息。这些端点可以帮助你监控应用程序的运行状态、性能指标和健康状况。 已经有了…1. 使用redisson完成延迟队列的功能 引入依赖 spring-boot-starter-actuator是Spring Boot提供的一个用于监控和管理应用程序的模块 用于查看应用程序的健康状况、审计信息、指标和其他有用的信息。这些端点可以帮助你监控应用程序的运行状态、性能指标和健康状况。 已经有了其他的监控和管理工具不需要使用Spring Boot Actuator提供的功能。 !-- redisson -- dependencygroupIdorg.redisson/groupIdartifactIdredisson-spring-boot-starter/artifactIdexclusionsexclusiongroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/exclusion/exclusions /dependency1.1 延时队列工具类 添加延迟队列时使用监测扫描时也会用这个工具类进行获取消息 package cn.creatoo.common.redis.queue;import cn.creatoo.common.core.utils.StringUtils; import org.redisson.api.RBlockingDeque; import org.redisson.api.RDelayedQueue; import org.redisson.api.RedissonClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.lang.NonNull; import org.springframework.stereotype.Component;import javax.annotation.Resource; import java.util.Map; import java.util.Objects; import java.util.concurrent.TimeUnit;/*** 分布式延时队列工具类* author*/ Component ConditionalOnBean({RedissonClient.class}) public class RedisDelayQueueUtil {private static final Logger log LoggerFactory.getLogger(RedisDelayQueueUtil.class);Resourceprivate RedissonClient redissonClient;/*** 添加延迟队列** param value 队列值* param delay 延迟时间* param timeUnit 时间单位* param queueCode 队列键* param T*/public T boolean addDelayQueue(NonNull T value, NonNull long delay, NonNull TimeUnit timeUnit, NonNull String queueCode) {if (StringUtils.isBlank(queueCode) || Objects.isNull(value)) {return false;}try {RBlockingDequeObject blockingDeque redissonClient.getBlockingDeque(queueCode);RDelayedQueueObject delayedQueue redissonClient.getDelayedQueue(blockingDeque);delayedQueue.offer(value, delay, timeUnit);//delayedQueue.destroy();log.info((添加延时队列成功) 队列键{}队列值{}延迟时间{}, queueCode, value, timeUnit.toSeconds(delay) 秒);} catch (Exception e) {log.error((添加延时队列失败) {}, e.getMessage());throw new RuntimeException((添加延时队列失败));}return true;}/*** 获取延迟队列** param queueCode* param T*/public T T getDelayQueue(NonNull String queueCode) throws InterruptedException {if (StringUtils.isBlank(queueCode)) {return null;}RBlockingDequeMap blockingDeque redissonClient.getBlockingDeque(queueCode);RDelayedQueueMap delayedQueue redissonClient.getDelayedQueue(blockingDeque);T value (T) blockingDeque.poll();return value;}/*** 删除指定队列中的消息** param o 指定删除的消息对象队列值(同队列需保证唯一性)* param queueCode 指定队列键*/public boolean removeDelayedQueue(NonNull Object o, NonNull String queueCode) {if (StringUtils.isBlank(queueCode) || Objects.isNull(o)) {return false;}RBlockingDequeObject blockingDeque redissonClient.getBlockingDeque(queueCode);RDelayedQueueObject delayedQueue redissonClient.getDelayedQueue(blockingDeque);boolean flag delayedQueue.remove(o);//delayedQueue.destroy();return flag;} } 1.2 延迟队列执行器 package cn.creatoo.system.handler;/*** 延迟队列执行器*/ public interface RedisDelayQueueHandleT {void execute(T t);}1.3 实现队列执行器 实现队列执行器接口在这里写延迟要做的业务逻辑 package cn.creatoo.system.handler.impl;import cn.creatoo.common.core.domain.vo.WaterVo; import cn.creatoo.system.api.RemoteFileService; import cn.creatoo.system.handler.RedisDelayQueueHandle; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;import java.util.Map;Component(exposeLinkCloudDelay) public class ExposeLinkCloudDelay implements RedisDelayQueueHandleMap {Autowiredprivate RemoteFileService remoteFileService;Overridepublic void execute(Map map) {long dataId Long.parseLong(map.get(dataId).toString());WaterVo waterVo new WaterVo();waterVo.setFileLink(map.get(fileLink).toString());waterVo.setType(Integer.parseInt(map.get(type).toString()));waterVo.setDataId(dataId);remoteFileService.waterLink(waterVo);} }1.4 延迟队列业务枚举类 package cn.creatoo.common.core.enums;import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor;/*** 延迟队列业务枚举类* author shang tf* data 2024/3/21 14:52*/ Getter NoArgsConstructor AllArgsConstructor public enum FileRedisDelayQueueEnum {EXPOSE_LINK_DELAY(EXPOSE_LINK_DELAY,资源链接处理,exposeLinkDelay),EXPOSE_LINK_CLOUD_DELAY(EXPOSE_LINK_CLOUD_DELAY,资源链接处理,exposeLinkCloudDelay),COMPRESSED_LINK_DELAY(COMPRESSED_LINK_DELAY,文件压缩处理,compressedLinkDelay),UPLOAD_TO_CLOUD_DELAY(UPLOAD_TO_CLOUD_DELAY,资源上传消费端,uploadToCloudDelay),GET_HASHCODE_DELAY(GET_HASHCODE_DELAY,资源hash值获取,getHashcodeDelay),UPLOAD_FILE_TO_CABINET(UPLOAD_FILE_CABINET,异步添加文件到数据柜,uploadFileCabinet);/*** 延迟队列 Redis Key*/private String code;/*** 中文描述*/private String name;/*** 延迟队列具体业务实现的 Bean* 可通过 Spring 的上下文获取*/private String beanId; } 1.5 启动延迟队列监测扫描 package cn.creatoo.system.handler.impl;import cn.creatoo.common.core.enums.FileRedisDelayQueueEnum; import cn.creatoo.common.redis.queue.RedisDelayQueueUtil; import cn.creatoo.system.handler.RedisDelayQueueHandle; import com.alibaba.fastjson2.JSON; import com.google.common.util.concurrent.ThreadFactoryBuilder; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; import org.springframework.context.ApplicationContext; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component;import javax.annotation.PostConstruct; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit;/*** author shang tf* data 2024/3/14 10:45* 启动延迟队列监测扫描* 文件处理的延迟队列线程池*/ Slf4j Component public class FileRedisDelayQueueRunner implements CommandLineRunner {Autowiredprivate RedisDelayQueueUtil redisDelayQueueUtil;Autowiredprivate ApplicationContext context;Autowiredprivate ThreadPoolTaskExecutor ptask;Value(${file-thread-pool.core-pool-size:1})private int corePoolSize;Value(${file-thread-pool.maximum-pool-size:1})private int maximumPoolSize;private ThreadPoolExecutor executorService;/*** 程序加载配置文件后延迟创建线程池*/PostConstructpublic void init() {executorService new ThreadPoolExecutor(corePoolSize, maximumPoolSize, 30, TimeUnit.SECONDS,new LinkedBlockingQueueRunnable(1000), new ThreadFactoryBuilder().setNameFormat(delay-queue-%d).build());}Overridepublic void run(String... args) {ptask.execute(() - {while (true) {try {FileRedisDelayQueueEnum[] queueEnums FileRedisDelayQueueEnum.values();for (FileRedisDelayQueueEnum queueEnum : queueEnums) {Object value redisDelayQueueUtil.getDelayQueue(queueEnum.getCode());if (value ! null) {System.out.println(----------------value: JSON.toJSONString(value));RedisDelayQueueHandleObject redisDelayQueueHandle (RedisDelayQueueHandleObject) context.getBean(queueEnum.getBeanId());executorService.execute(() - {redisDelayQueueHandle.execute(value);});}}TimeUnit.MILLISECONDS.sleep(500);} catch (InterruptedException e) {log.error((FileRedission延迟队列监测异常中断) {}, e.getMessage());}}});log.info((FileRedission延迟队列监测启动成功));} }1.6 使用延迟队列 使用时在需要延时的地方。 通过注入RedisDelayQueueUtil使用addDelayQueue方法进行添加延迟任务。 MapString, String map new HashMap(); map.put(dataId, examineVo.getId().toString()); map.put(fileLink, resourceLink); map.put(type, resourceType.toString()); map.put(remark, 资源链接处理); // 5秒后执行exposeLinkCloudDelay中的方法 redisDelayQueueUtil.addDelayQueue(map, 5, TimeUnit.SECONDS, FileRedisDelayQueueEnum.EXPOSE_LINK_CLOUD_DELAY.getCode());2. 使用redisson完成不延时队列的功能 2.1 分布式队列工具类 package cn.creatoo.common.redis.queue;import cn.creatoo.common.core.utils.StringUtils; import org.redisson.api.RBoundedBlockingQueue; import org.redisson.api.RQueue; import org.redisson.api.RedissonClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.lang.NonNull; import org.springframework.stereotype.Component;import javax.annotation.Resource; import java.util.Objects;/*** 分布式队列工具类*/ Component ConditionalOnBean({RedissonClient.class}) public class RedisBlockQueueUtil {private static final Logger log LoggerFactory.getLogger(RedisBlockQueueUtil.class);Resourceprivate RedissonClient redissonClient;//public T boolean addQueue(NonNull T value, NonNull String queueCode) {if (StringUtils.isBlank(queueCode) || Objects.isNull(value)) {return false;}try {RBoundedBlockingQueueT queue redissonClient.getBoundedBlockingQueue(queueCode);queue.trySetCapacity(10000);queue.put(value);} catch (Exception e) {throw new RuntimeException((添加redisson队列失败));}return true;}/*** 获取队列* param queueCode* param T*/public T T getQueuePeek(NonNull String queueCode) throws InterruptedException {if (StringUtils.isBlank(queueCode)) {return null;}RQueueT queue redissonClient.getBoundedBlockingQueue(queueCode);T obj (T) queue.peek();return obj;}public T T getQueueTake(NonNull String queueCode) throws InterruptedException {if (StringUtils.isBlank(queueCode)) {return null;}RBoundedBlockingQueueT queue redissonClient.getBoundedBlockingQueue(queueCode);T obj (T) queue.take();return obj;}}2.2 队列业务枚举 package cn.creatoo.common.core.enums;import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor;/*** 队列业务枚举*/ Getter NoArgsConstructor AllArgsConstructor public enum RedisQueueEnum {FLOW_RECORD(redissionQueue:FLOW_RECORD, 流量流水),USER_LOGIN_RECORD(redissionQueue:USER_LOGIN_RECORD, 用户登录流水),USER_REGISTER_RECORD(redissionQueue:USER_REGISTER_RECORD, 用户注册流水),SMS_SEND_RECORD(redissionQueue:SMS_SEND_RECORD, 短信流水);/*** 队列 Redis Key*/private String code;/*** 中文描述*/private String name;}2.3 启动队列监测扫描 package cn.creatoo.system.handler.impl;import cn.creatoo.common.core.enums.RedisQueueEnum; import cn.creatoo.common.core.utils.StringUtils; import cn.creatoo.common.mongodb.model.FlowStatistics; import cn.creatoo.common.mongodb.model.MessageSendRecord; import cn.creatoo.common.mongodb.model.UserLogin; import cn.creatoo.common.mongodb.model.UserRegister; import cn.creatoo.common.redis.queue.RedisBlockQueueUtil; import com.google.common.util.concurrent.ThreadFactoryBuilder; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component;import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit;/*** description: 启动队列监测扫描*/ Slf4j Component public class RedisQueueRunner implements CommandLineRunner {Autowiredprivate RedisBlockQueueUtil redisBlockQueueUtil;//Autowired//private IBdStatcountService bdStatcountService;Autowiredprivate ThreadPoolTaskExecutor ptask;Resourceprivate MongoTemplate mongoTemplate;//Autowired//private BdAdminHomeService bdAdminHomeService;Value(${prodHost.mall})private String mallHost;ThreadPoolExecutor executorService new ThreadPoolExecutor(4, 8, 30, TimeUnit.SECONDS,new LinkedBlockingQueueRunnable(1000),new ThreadFactoryBuilder().setNameFormat(queue-%d).build());Overridepublic void run(String... args) throws Exception {ptask.execute(() - {while (true){try {RedisQueueEnum[] queueEnums RedisQueueEnum.values();for (RedisQueueEnum queueEnum : queueEnums) {Object value redisBlockQueueUtil.getQueuePeek(queueEnum.getCode());if (value ! null) {executorService.execute(() - {try {//System.out.println(value.toString());if(queueEnum.getCode().equals(RedisQueueEnum.FLOW_RECORD.getCode())){FlowStatistics flowStatistics redisBlockQueueUtil.getQueueTake(queueEnum.getCode());/* if(flowStatistics!null StringUtils.isNotBlank(flowStatistics.getUrl())){mongoTemplate.insert(flowStatistics, pv_ new SimpleDateFormat(yyyy).format(new Date()));// 添加首页统计缓存bdAdminHomeService.addDetailCache(flowStatistics);if(StringUtils.isNotBlank(flowStatistics.getUrl())){bdStatcountService.browseByUrl(flowStatistics.getUrl());}}*/} else if (queueEnum.getCode().equals(RedisQueueEnum.USER_LOGIN_RECORD.getCode())) {UserLogin userLogin redisBlockQueueUtil.getQueueTake(queueEnum.getCode());mongoTemplate.insert(userLogin, user_login_ new SimpleDateFormat(yyyy).format(new Date()));} else if (queueEnum.getCode().equals(RedisQueueEnum.USER_REGISTER_RECORD.getCode())) {UserRegister userRegister redisBlockQueueUtil.getQueueTake(queueEnum.getCode());mongoTemplate.insert(userRegister, user_register);} else if (queueEnum.getCode().equals(RedisQueueEnum.SMS_SEND_RECORD.getCode())) {MessageSendRecord sendRecord redisBlockQueueUtil.getQueueTake(queueEnum.getCode());mongoTemplate.insert(sendRecord, sms_send_ new SimpleDateFormat(yyyy).format(new Date()));}} catch (InterruptedException e) {log.error((Redission队列监测异常中断) {}, e.getMessage());}});}}TimeUnit.MILLISECONDS.sleep(500);} catch (InterruptedException e) {log.error((Redission队列监测异常中断) {}, e.getMessage());}}});log.info((Redission队列监测启动成功));} }2.4 使用 这个是直接执行没有延迟的功能 redisBlockQueueUtil.addQueue(userRegister, RedisQueueEnum.USER_REGISTER_RECORD.getCode());
http://www.zqtcl.cn/news/974876/

相关文章:

  • 庄河网站建设如何上传文件到网站
  • 北京企业网站改版wordpress comer
  • 做租赁的行业网站腾讯云服务器用什么做网站
  • 承德优化网站建设建设旅游网网站软件
  • 金山专业网站建设科技作品手工
  • 企业网站开发丨薇大型门户网站制作教程
  • m开头的网站开发工具青少儿编程
  • 确定网站风格域名查询中国万网
  • 邢台网站优化定制网站内怎么做搜索
  • 深圳公司网站开发济宁医院网站建设
  • vr功能网站建设手机网站引导页js插件
  • 汕头企业建站系统模板沈阳网站建设q479185700棒
  • 外包公司做网站多少百度做推广一般要多少钱
  • asp静态网站用shopify 做网站
  • 政务公开和网站建设dedecms模板安装教程
  • 做网站公司选哪家erp财务软件怎么使用
  • 常州网站建设效果网站备案换公司吗
  • 网站排名方法客流统计系统厂家
  • 免费做网站怎么做网站吗广州工程
  • 如何做全景素材网站常州做网站价格
  • 网站域名删除时间查询wordpress首页文章显示图片
  • 做网站需要什么样的服务器用html制作购物网站
  • 运城市住房与城乡建设局网站电脑培训学校课程
  • 二级学院网站建设自评报告最简单网页制作软件
  • 不开网店怎么做淘宝网站建设部网站江苏金安
  • 厦门做网站最好的公司汽车之家官网首页网页
  • 企业网站seo价格免费的网站模版下载
  • 做推广用那个网站吗百度小程序有什么用
  • 上海优质网站seo有哪些wordpress点击阅读全部
  • 企业网站建设中企动力网站制作电话多少