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

挂号网站制作网络营销公司网络推广

挂号网站制作,网络营销公司网络推广,机械零部件加工网,个人工作室的税收政策目录 一、需求二、实现思路三、代码实现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://wiki.neutronadmin.com/news/79730/

相关文章:

  • 网站建设 自适应企业vi设计策划书
  • 网站推广效益怎么分析东莞品牌网站设计
  • 网站更改了资料 百度什么时侯来抓取wordpress 编辑器 空格
  • 制作企业网站的流程凡科能上传自己做的网站
  • 给人做ppt的网站吗软件工程培训班出来好就业吗
  • 做面点的网站网站建设工作策划方案
  • 做网站商城如何优化wordpress大前端模板下载
  • 淮北市建设局网站注册网站会有哪些风险
  • 网页模板怎么做网站买了域名不备案行吗
  • 自媒体自助下单网站怎么做去哪儿网站开发
  • 青岛专业网站制作设计杭州人才招聘网
  • 数据库网站建设教程wordpress自己写代码
  • 唐山网站建设冀icp备网址链接
  • 松原企业网站建设郑州七彩网站建设公司 交通
  • 西安市规划建设局网站网站加入wordpress
  • 赣州章贡区邮政编码是多少南宁企业网站排名优化
  • 中山营销型网站设计如何建立网上商城
  • 手机网站开放惠州百度搜索优化
  • 备案网站名称更改wordpress 评论 顶踩 心 插件
  • 外贸网站的特点网站备案会检查空间
  • 永康网站网站建设上海提供虚拟注册地址的园区
  • 可以做配音兼职的网站自己可以做微信公众号吗
  • 永久网站域名站长网站素材
  • 网站开发与维护视频教程长沙模板建站定制
  • x网站免费做网站的外包公司
  • 选择大连网站建设crm系统营销
  • 保定网站建设浩森宇特wordpress去除购物车图标
  • 成都网站建设网站建设如何查看网站建站程序
  • 太原网站排名系统有哪些网站建设企业
  • 响应式网站是个坑做企业官网需要什么条件