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

网站文明建设工程包括wordpress免费采集插件

网站文明建设工程包括,wordpress免费采集插件,深圳微商城网站制作公司,兔展目录 一、需求二、实现思路三、代码实现3.1 导入依赖3.2 配置redis3.3 自定义注解3.4 定义切面类3.5 自定义异常类3.6 全局异常处理器 一、需求 在我们程序中#xff0c;有时候需要对一些接口做访问控制#xff0c;使程序更稳定#xff0c;最常用的一种是通过ip限制#x… 目录 一、需求二、实现思路三、代码实现3.1 导入依赖3.2 配置redis3.3 自定义注解3.4 定义切面类3.5 自定义异常类3.6 全局异常处理器 一、需求 在我们程序中有时候需要对一些接口做访问控制使程序更稳定最常用的一种是通过ip限制还有一种是通过用户名限制,也可以把一个接口限制死在一段时间内只能访问多少次这个根据自己需求来不固定。在需要做限制的方法上加上一个自定义注解用aop获取到这个方法利用redis中的increment方法去计数访问次数超过访问次数return一个自定义异常。 二、实现思路 选用的是hash结构类型去存储访问次数用访问路径作为外层keyip作为内层key访问次数作为value。 首先根据id从redis中取出访问次数。如果是第一次访问就添加到redis当中value设置为1如果不是第一次访问就判断是否在规定访问次数内返回结果 三、代码实现 3.1 导入依赖 !--aop依赖--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependency!--redis依赖--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency3.2 配置redis 声明配置类 Configuration public class RedisConfig {BeanSuppressWarnings(value { unchecked, rawtypes }) //屏蔽一些无关紧张的警告public RedisTemplateObject,Object redisTemplate(RedisConnectionFactory connectionFactory){RedisTemplateObject, Object redisTemplate new RedisTemplate();//GenericJackson2JsonRedisSerializer比Jackson2JsonRedisSerializer效率低//GenericJackson2JsonRedisSerializer jsonRedisSerializer new GenericJackson2JsonRedisSerializer();Jackson2JsonRedisSerializer jsonRedisSerializer new Jackson2JsonRedisSerializer(Object.class);redisTemplate.setConnectionFactory(connectionFactory);// 使用StringRedisSerializer来序列化和反序列化redis的key值redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(jsonRedisSerializer);//Hash的key也采用StringRedisSerializer的序列化方式redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(jsonRedisSerializer);redisTemplate.afterPropertiesSet();return redisTemplate;} }application.yml配置 spring:# redis配置redis:host: localhostport: 6379database: 0 #默认连接0号数据库3.3 自定义注解 /*** 接口访问频率注解默认一分钟只能访问5次*/ Documented Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface AccessLimit {long time() default 60000; 限制时间 单位毫秒(默认值一分钟int value() default 5;// 允许请求的次数(默认值5次 }3.4 定义切面类 Aspect Component Slf4j public class InterfaceLimitAspect {Autowiredprivate RedisTemplate redisTemplate;Pointcut(annotation(accessLimit))public void pt(AccessLimit accessLimit){}Around(pt(accessLimit))public Object Around(ProceedingJoinPoint joinPoint,AccessLimit accessLimit) throws Throwable {// 获得request对象ServletRequestAttributes sra (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request sra.getRequest();log.info(request.getRequestURI());//redis这里推荐使用hash类型url为外层key,ip作为内层key,访问次数作为valueBoundHashOperations hashOps redisTemplate.boundHashOps(interfaceLimit:request.getRequestURI());//获取ip获取接口访问次数Integer ipCount (Integer)hashOps.get(request.getRemoteAddr());Integer count ipCountnull?0:ipCount;//判断访问次数是否大于限制的次数if(countaccessLimit.value()){//超过次数不执行目标方法log.error(接口拦截{} 请求超过限制频率【{}次/{}ms】,IP为{},request.getRequestURI(),accessLimit.value(),accessLimit.time(),request.getRemoteAddr());throw new AccessLimitException(ResultCodeEnum.ACCESS_LIMIT);}else{//请求时设置有效时间, 记录加一hashOps.increment(request.getRemoteAddr(),1);hashOps.expire(accessLimit.time()*5, TimeUnit.MILLISECONDS);}Object result joinPoint.proceed();return result;} }3.5 自定义异常类 public class AccessLimitException extends RuntimeException{private Integer code;private String message;public Integer getCode(){return code;}public String getMessage(){return message;}public AccessLimitException(ResultCodeEnum resultCodeEnum){super(resultCodeEnum.getMessage());this.code resultCodeEnum.getCode();this.message resultCodeEnum.getMessage();} }3.6 全局异常处理器 RestControllerAdvice Slf4j public class HandlerException {ExceptionHandler(Exception.class)public Result handle(Throwable e){log.info(e.getMessage());return Result.build(null, 507,系统错误);}ExceptionHandler(AccessLimitException.class)public Result AccessHandle(AccessLimitException e){log.error(e.getMessage());return Result.build(null,e.getCode(),e.getMessage());} }
http://www.yutouwan.com/news/284473/

相关文章:

  • 网站维护费怎么做分录网站更改备案信息在哪
  • 商城类网站主要分为哪些模块九江建设公司网站
  • 侯马市网站建设公司wordpress toggle
  • 便宜正品的购物app龙斗seo博客
  • 网站建设与管理设计一级消防工程师考试试题及答案
  • 电商网站的二级怎么做牡丹江0453免费信息网站
  • 旅游网站首页模板观光园网站建设
  • 模板网站和定制网站的区别是什么国外网站建设接单
  • 佛山网站建设哪家公司好php充值网站源码
  • 哪个网站可以学做包包发布摄影作品的平台
  • 亚马逊网站建设分析局域网 wordpress
  • 银川微信网站中山企业网站优化
  • 机械配件东莞网站建设linux建设一个网站
  • 网站链接优化灰色关键词排名方法
  • 网站搭建需要的公司潍坊企业网站模板
  • 网站设计教程及在线模拟器邯郸做网站的博客
  • 网站的搜索引擎方案中国新闻社是央企吗
  • 自己做网站能挣钱吗vps如果制作论坛网站
  • 什么网站可以做行测数字营销专业学什么课程
  • 宽屏企业网站模板网站建设推广销售好做吗
  • 做图标的网站天河岗顶棠下上社网站建设
  • 建三江建设局网站网站建设与熊掌号未来的关系
  • 开网店的一年的费用郑州做网站优化电话
  • 订阅号怎么做微网站wordpress图片懒加载js
  • 好友介绍网站怎么做百度关键词优化有效果吗
  • 网站备案ip查询系统吉水县建设局网站
  • 兴县做网站的公司网站无收录的原因
  • 为什么不推荐免费建站网站建设纟金手指下拉壹陆
  • it外包公司 能去吗优化营商环境评价
  • 温州哪里有网站优化python 自己做网站