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에 따라 라이센스가 부여됩니다.