>기술 주변기기 >일체 포함 >현재 우리는 AI를 사용하여 주석의 반복 제출을 방지하는 인터페이스를 만들고 있습니다.

현재 우리는 AI를 사용하여 주석의 반복 제출을 방지하는 인터페이스를 만들고 있습니다.

王林
王林앞으로
2023-06-05 13:33:181171검색

안녕하세요 여러분, 저는 정말 대단해요.

인터페이스가 한 번 또는 여러 번 호출되는 횟수에 관계없이 인터페이스의 멱등성은 동일한 리소스에 대한 작업이 동일한 결과만 생성하도록 보장합니다. 동일한 인터페이스 요청을 여러 번 반복적으로 호출하면 단일 요청과 동일한 결과가 나타나야 하며 불일치나 부작용이 발생해서는 안 됩니다.

오늘은 인터페이스가 30초 이내에 여러 번 요청되는 것을 방지하기 위해 인공 지능을 사용하여 사용자 정의 주석을 만들고 Redis를 캐시로 사용했습니다.

질문

말을 많이 하지 말고 직접 물어보세요.

현재 우리는 AI를 사용하여 주석의 반복 제출을 방지하는 인터페이스를 만들고 있습니다.

몇 분 정도 기다리세요. . .

1. 인터페이스 보호 기간, 반복 제출 방지 등을 포함한 사용자 정의 주석을 만듭니다.

현재 우리는 AI를 사용하여 주석의 반복 제출을 방지하는 인터페이스를 만들고 있습니다.

2. 그런 다음 인터셉터를 만듭니다.

현재 우리는 AI를 사용하여 주석의 반복 제출을 방지하는 인터페이스를 만들고 있습니다.

여기에 인터셉터의 핵심 코드를 게시합니다.

@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 인터셉터를 등록합니다.

최종 설명 및 용법.

현재 우리는 AI를 사용하여 주석의 반복 제출을 방지하는 인터페이스를 만들고 있습니다.

위 코드가 가장 중요한 코드입니다. 현재 우리는 AI를 사용하여 주석의 반복 제출을 방지하는 인터페이스를 만들고 있습니다.

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를 로컬에서 시작한 다음 테스트를 위해 로컬 SpringBoot 프로젝트를 시작하세요.

로컬 인터페이스 테스트: 30초 이내에 반복되는 요청을 차단해야 합니다. 직접

현재 우리는 AI를 사용하여 주석의 반복 제출을 방지하는 인터페이스를 만들고 있습니다.

Redis에 캐시된 KEY는 다음과 같습니다.

현재 우리는 AI를 사용하여 주석의 반복 제출을 방지하는 인터페이스를 만들고 있습니다.

해당 코드는 글 마지막에 있으니 필요하시면 무료로 사용하실 수 있습니다!

인터페이스 멱등성 솔루션현재 우리는 AI를 사용하여 주석의 반복 제출을 방지하는 인터페이스를 만들고 있습니다.

인터페이스 멱등성 솔루션에 대해 물어보겠습니다.

이 답변에 대해 어떻게 생각하시나요?

관련 코드 링크, 방문을 환영합니다: 현재 우리는 AI를 사용하여 주석의 반복 제출을 방지하는 인터페이스를 만들고 있습니다.

https://www.php.cn/link/94c0915ab3bcbc61c1c61624dd6d7cd5

위 내용은 현재 우리는 AI를 사용하여 주석의 반복 제출을 방지하는 인터페이스를 만들고 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제