안녕하세요 여러분, 저는 정말 대단해요.
인터페이스가 한 번 또는 여러 번 호출되는 횟수에 관계없이 인터페이스의 멱등성은 동일한 리소스에 대한 작업이 동일한 결과만 생성하도록 보장합니다. 동일한 인터페이스 요청을 여러 번 반복적으로 호출하면 단일 요청과 동일한 결과가 나타나야 하며 불일치나 부작용이 발생해서는 안 됩니다.
오늘은 인터페이스가 30초 이내에 여러 번 요청되는 것을 방지하기 위해 인공 지능을 사용하여 사용자 정의 주석을 만들고 Redis를 캐시로 사용했습니다.
말을 많이 하지 말고 직접 물어보세요.
몇 분 정도 기다리세요. . .
1. 인터페이스 보호 기간, 반복 제출 방지 등을 포함한 사용자 정의 주석을 만듭니다.
2. 그런 다음 인터셉터를 만듭니다.
여기에 인터셉터의 핵심 코드를 게시합니다.
@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 인터셉터를 등록합니다.
최종 설명 및 용법.위 코드가 가장 중요한 코드입니다.
Connect to Redis
이제 Redis에 연결합니다. 가장 간소화된 구성 버전
spring:data:redis:host: 127.0.0.1 port: 6379
인터페이스 사용 주석
@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>
Redis에 캐시된 KEY는 다음과 같습니다. 해당 코드는 글 마지막에 있으니 필요하시면 무료로 사용하실 수 있습니다!
인터페이스 멱등성 솔루션
인터페이스 멱등성 솔루션에 대해 물어보겠습니다. 이 답변에 대해 어떻게 생각하시나요?관련 코드 링크, 방문을 환영합니다:
https://www.php.cn/link/94c0915ab3bcbc61c1c61624dd6d7cd5위 내용은 현재 우리는 AI를 사용하여 주석의 반복 제출을 방지하는 인터페이스를 만들고 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!