springboot 은 ehcache 와 결합 하여 악의 적 인 리 셋 요청 의 실현 을 방지 합 니 다.
                                            
 3702 단어  springboot방지 하 다.악의새로 고침
                    
우 리 는 개 발 된 사 이 트 를 접속 하기 전에 반드시 다른 사람 이 악의 적 으로 당신 의 홈 페이지 를 갱신 하 는 상황 을 고려 하여 최대한 그들 을 제한 해 야 합 니 다.그렇지 않 으 면 애플 리 케 이 션 서버 를 무 너 뜨 릴 수 있 습 니 다.어떤 악의 적 인 사용자 가 많은 육계 들 을 이용 하여 1 분 안에 웹 페이지 에 몇 십 만 번 을 요청 하 는 것 이 어떤 상황 인지 상상 해 보 세 요.
일부 내용 참조 네트워크.
어떤 효 과 를 내야 합 니까?
요청 한 사용 자 를 제한 합 니 다.방문 IP 에 따라 N 분 동안 단일 웹 페이지 를 요청 하 는 횟수 를 기록 합 니 다.N 번 을 초과 하면 이 IP 를 캐 시 블랙리스트 에 추가 하고 3 시간 동안 유형 웹 페이지 에 접근 할 수 없 도록 제한 합 니 다.
효과 도
1 분 동안 요청 서 홈 페이지 가 15 회 를 넘 으 면 블랙리스트 에 가입 하여 3 시간 동안 동결 합 니 다!
 개발 절차
생략
주석 만 들 기
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
@Order(Ordered.HIGHEST_PRECEDENCE)
public @interface RequestLimit {
  /**
   *          
   */
  int count() default 15;
  /**
   *    ,     ,      
   */
  long time() default 1000*60;
}AOP 만 들 기
@Aspect
@Component
public class RequestLimitAspect {
  private static final Logger logger = LoggerFactory.getLogger(RequestLimit.class);
  @Autowired
  EhcacheUtil ehcacheUtil;
  @Before("within(@org.springframework.stereotype.Controller *) && @annotation(limit)")
  public void requestLimit(final JoinPoint joinPoint , RequestLimit limit) throws RequestLimitException {
    try {
      Object[] args = joinPoint.getArgs();
      HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
      String ip = IpUtil.getRemoteIp(request);
      String uri = request.getRequestURI().toString();
      String key = "req_"+uri+"_"+ip;
      String blackKey = "black_"+ip; //    IP      
      int count = 0; //     
      //         
      if (ehcacheUtil.contains("countcache",blackKey)){
        throw new RequestLimitException();
      }else{
        //            
        if (!ehcacheUtil.contains("limitCache",key)) {
          ehcacheUtil.put("limitCache",key,1);
        } else {
          count = ehcacheUtil.getInt("limitCache",key)+1;
          ehcacheUtil.put("limitCache",key,count);
          if (count > limit.count()) {
            logger.info("  IP[" + ip + "]    [" + uri + "]        [" + limit.count() + "]");
            //      
            ehcacheUtil.put("countcache",blackKey,"badguy");
            throw new RequestLimitException();
          }
        }
      }
    }catch (RequestLimitException e){
      throw e;
    }catch (Exception e){
      logger.error("    ",e);
    }
  }
}응용 op응용 할 인 터 페 이 스 를 찾 아서 주석@RequestLimit 을 추가 하면 됩 니 다.
 @RequestLimit(count=10)
  @OperLog(operModule = "    ",operType = "  ",operDesc = "      ")
  @GetMapping("/more/{categoryId}")
  public String getMore(@PathVariable("categoryId") String categoryId, Model model, HttpServletRequest request) {
    //  
  }springboot 와 ehcache 를 결합 하여 악의 적 인 리 셋 방지 요청 의 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 springboot 의 악의 적 인 리 셋 방지 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
                이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin Springboot -- 파트 14 사용 사례 REST로 전환하여 POST로 JSON으로 전환前回 前回 前回 記事 の は は で で で で で で を 使っ 使っ 使っ て て て て て リクエスト を を 受け取り 、 reqeustbody で 、 その リクエスト の ボディ ボディ を を 受け取り 、 関数 内部 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.