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

微信营销和网站建设电商网站开发平台有哪些

微信营销和网站建设,电商网站开发平台有哪些,免费游戏网页,做铁合金用哪个外贸网站好说明: 一些版本比较老的spring框架的,是通过继承HandlerInterceptorAdapter并重写preHandle()方法,和继承WebMvcConfigurerAdapter并重写 addInterceptors()方法来实现拦截器的,但是这两个类很久前就已经过时了,不推荐…

说明:

一些版本比较老的spring框架的,是通过继承HandlerInterceptorAdapter并重写preHandle()方法,和继承WebMvcConfigurerAdapter并重写 addInterceptors()方法来实现拦截器的,但是这两个类很久前就已经过时了,不推荐使用,推荐使用下面两个接口。

以接口接口限流进行具体的操作,自定义拦截器主要步骤就是两个:

1、实现HandlerInterceptor,并实现rpreHandle()前置处理方法

2、实现WebMvcConfigurer,并实现addInterceptors()增加拦截器方法,把自定义的拦截器增加到spring容器中

HandlerInterceptor拦截器处理器接口有三个接口
● preHandle:在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理;
● postHandle:在业务处理器处理请求执行完成后,生成视图之前执行。后处理(调用了Service并返回ModelAndView,但未进行页面渲染),有机会修改ModelAndView ;
● afterCompletion:在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面);

实操:

1、引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!--Redis依赖-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2、自定义接口访问注解

/**
* 接口访问限制枚举
* @author ppp
* @date 2023/2/14
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AccessLimit {/*** @return 访问最大次数*/int accessMaxTimes() default 60;/*** @return 时间*/long timeOut() default 1;/*** @return 时间单位*/TimeUnit timeUnit() default TimeUnit.MINUTES;
}

3、自定义拦截器配置

同时实现HandlerInterceptor,WebMvcConfigurer,实现preHandle()和addInterceptors()方法

/**
* 接口访问限制拦截器配置
* @author ppp
* @date 2023/2/14
*/
@Component
public class AccessLimitInterceptorConfig implements HandlerInterceptor, WebMvcConfigurer {private final static String KEY = "Redis_accessLimit_key";@AutowiredRedisTemplate redisTemplate;@AutowiredAccessLimitInterceptorConfig accessLimitInterceptorConfig;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//判断请求是否属于方法的请求if(handler instanceof HandlerMethod){HandlerMethod hm = (HandlerMethod) handler;//获取方法中的注解,看是否有该注解AccessLimit accessLimit = hm.getMethodAnnotation(AccessLimit.class);if(accessLimit == null){return true;}int accessMaxTimes = accessLimit.accessMaxTimes();long timeOut = accessLimit.timeOut();TimeUnit timeUnit = accessLimit.timeUnit();// 如果redis不存在或已经过期Long expire =redisTemplate.opsForValue().getOperations().getExpire(KEY);if (!redisTemplate.hasKey(KEY) ||  Objects.requireNonNull(expire).intValue() < 0) {redisTemplate.opsForValue().set(KEY, 1, timeOut, timeUnit);} else {long increment = redisTemplate.opsForValue().increment(KEY).intValue();if (increment > accessMaxTimes) {throw new RuntimeException("访问已经超过最大值: " + accessMaxTimes);}}}return true;}@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(accessLimitInterceptorConfig);}
}

4、配置redis

/*** Redis管理配置*/
@Configuration
public class RedisConfigurer {/*** 设置 redisTemplate 的序列化设置** @param redisConnectionFactory* @return*/@Beanpublic RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<Object, Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);GenericToStringSerializer genericToStringSerializer = new GenericToStringSerializer(Object.class);template.setValueSerializer(genericToStringSerializer);template.setKeySerializer(new StringRedisSerializer());template.setHashKeySerializer(new StringRedisSerializer(Charset.forName("UTF-8")));template.setHashValueSerializer(new StringRedisSerializer(Charset.forName("UTF-8")));template.afterPropertiesSet();return template;}@Beanpublic CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {return new RedisCacheManager(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory),this.getRedisCacheConfigurationWithTtl(24 * 60 * 60), // 默认策略,未配置的 key 会使用这个this.getRedisCacheConfigurationMap() // 指定 key 策略);}private Map<String, RedisCacheConfiguration> getRedisCacheConfigurationMap() {Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>();return redisCacheConfigurationMap;}private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Integer seconds) {RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(seconds));return redisCacheConfiguration;}
}

5、使用

/*** 一分钟内最多请求10次* @param content*/
@AccessLimit(accessMaxTimes = 10, timeOut = 1, timeUnit = TimeUnit.MINUTES)
@GetMapping("/sendEvent")
public void sendEvent(@RequestParam String content) {testService.send(content);
}
http://www.dinnco.com/news/27205.html

相关文章:

  • 自己怎么做免费网站一篇好的营销软文
  • 基于jsp的精品课程网站建设semir
  • 做网站反链360识图
  • 百度网盘怎样做网站网络营销方案案例
  • 网站生成软件推广营销app
  • 营销型网站建设方案演讲ppt2022最新热点事件及点评
  • 云南省住房和城乡建设厅网站seo推广公司招商
  • 网站建设高清图片网络推广合作协议
  • 网站上的滚动条是如何做的东莞seo黑帽培训
  • 新广告法 做网站的深圳关键词排名seo
  • 律师网站建设推广如何seo搜索引擎优化
  • 深圳做网站找哪家好合肥关键词排名工具
  • 常州网站推广多少钱网络运营工作内容
  • 青岛开发区网站建设自己如何优化网站排名
  • 黄石网站建设价格企业推广软件
  • 制作一个公司网站用vs怎么做推广引流最快的方法
  • 应用开发是什么网页优化最为重要的内容是
  • 网站定制开发前期要有一定的规划网络推广app
  • 不改变网站怎么做关键词优化百度店铺怎么开通
  • 网站内页产品做跳转重庆网站seo推广公司
  • 服务建设网站晨阳seo
  • 长沙简单的网站建设微信软文
  • 网页制作教程咖啡图南宁seo咨询
  • WordPress如何建立手机网站企业网站优化价格
  • 长沙县工程建设质监站网站宁波seo网络推广定制
  • wordpress blissseo培训价格
  • 唐山网站建设seo站长工具综合查询
  • WordPress主题加验证码镇江交叉口优化
  • wordpress扫码枪杭州网站优化多少钱
  • 汕头企业网站推广方法宣传软文范例