Home  >  Article  >  Technology peripherals  >  Today we are using AI to create an interface to prevent repeated submission of annotations.

Today we are using AI to create an interface to prevent repeated submission of annotations.

王林
王林forward
2023-06-05 13:33:181121browse

Hello, everyone, I am amazing.

No matter whether the interface is called once or multiple times, the idempotence of the interface ensures that operations on the same resource will only produce the same result. Repeated calls to the same interface request multiple times should have the same results as a single request and should not cause inconsistency or side effects.

Today we used artificial intelligence to create a custom annotation to prevent the interface from being requested multiple times within 30 seconds, and used Redis as a cache.

Question

Without further ado, just ask:

Today we are using AI to create an interface to prevent repeated submission of annotations.

After waiting for a few minutes. . .

1. Create custom annotations, including interface protection duration, enabling protection against repeated submissions, etc.

Today we are using AI to create an interface to prevent repeated submission of annotations.

2. Then create the interceptor

Today we are using AI to create an interface to prevent repeated submission of annotations.

Here we Post the core code of the interceptor:

@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {if (handler instanceof HandlerMethod) {HandlerMethod handlerMethod = (HandlerMethod) handler;RepeatSubmit annotation = handlerMethod.getMethodAnnotation(RepeatSubmit.class);if (annotation != null && annotation.enable()) {String key = buildKey(request);if (StringUtils.hasText(redisTemplate.opsForValue().get(key))) {response.getWriter().write("repeat request, please try again later!");return false;} else {redisTemplate.opsForValue().set(key, Arrays.toString(request.getInputStream().readAllBytes()), annotation.timeout(), TimeUnit.SECONDS);}}}return true;} //创建redis 缓存keyprivate String buildKey(HttpServletRequest request) throws IOException, NoSuchAlgorithmException {String key = useRequestMD5 ? hashRequest(request) : request.getRequestURI();return "repeat-submit:" + key;} //对请求做hash运算private String hashRequest(HttpServletRequest request) throws IOException, NoSuchAlgorithmException {byte[] hashBytes = MessageDigest.getInstance("MD5").digest(request.getInputStream().readAllBytes());StringBuilder sb = new StringBuilder();for (byte b : hashBytes) {sb.append(String.format("%02x", b));}return sb.toString();}

3. Register the interceptor

Today we are using AI to create an interface to prevent repeated submission of annotations.

The explanation and usage given at the end.

Today we are using AI to create an interface to prevent repeated submission of annotations.


The above is the most critical code.

Connect to Redis

Next we connect to Redis. The most streamlined configuration version

spring:data:redis:host: 127.0.0.1 port: 6379

Interface usage annotations

@RestControllerpublic class RepeatTestController {@RepeatSubmit@GetMapping("/hello/mono1")public Mono<string> mono(){return Mono.just("Hello Mono -Java North");}@RepeatSubmit@PostMapping ("/hello/mono1")public Mono<string> mono1(@RequestBody User user){return Mono.just("Hello Mono -Java North-"+user.getName());}}</string></string>

Start a Redis locally, and then start the local SpringBoot project for testing,

Today we are using AI to create an interface to prevent repeated submission of annotations.

Local interface test: Repeated requests within 30 seconds will need to be intercepted directly

Today we are using AI to create an interface to prevent repeated submission of annotations.

The KEY cached in Redis is as follows:

Today we are using AI to create an interface to prevent repeated submission of annotations.

The relevant code is at the end of the article, you can use it for free if you need it!

Interface idempotence solution

Let’s ask about the interface idempotence solution,

Today we are using AI to create an interface to prevent repeated submission of annotations.

About What do you think of this answer?

Related code links, welcome to visit:

//m.sbmmt.com/link/94c0915ab3bcbc61c1c61624dd6d7cd5

The above is the detailed content of Today we are using AI to create an interface to prevent repeated submission of annotations.. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:51cto.com. If there is any infringement, please contact admin@php.cn delete