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

王林
풀어 주다: 2023-06-05 13:33:18
앞으로
1151명이 탐색했습니다.

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

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

오늘은 인터페이스가 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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿