개발자 되어버리기
Springboot 토큰 걸러내기 본문
사내에서 프론트엔드와 클라이언트 단에서 토큰 로그아웃을 진행하였는데
무언가 오류가 나거나 토큰이 불필요하게 남아있게 될 경우를 대비에 토큰이 불필요한 API에 대해 토큰을 사용하지 않도록 필터링 하는 작업을 진행하게 되었습니다.
일단 기본적으로 밑에 글의 트래픽 인터셉트 글을 참고하시면 좋을 듯 합니다.
우선 인터셉트에 필터 관련 코드를 추가합니다.
@Component
@Log4j2
@RequiredArgsConstructor
public class HttpInterceptor extends HandlerInterceptorAdapter {
PricingPlanService pricingPlanService = new PricingPlanService();
private final JwtTokenProvider jwtTokenProvider;
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) {
String jwt = request.getHeader("Authorization");
log.info("================ Before Method");
log.info("접속 ip 주소 '{}'", request.getRemoteAddr());
log.info(request.getRemoteAddr());
if(tokenFilter(request)){
if(jwt != null && !jwt.equals("undefined")){
Bucket bucket = pricingPlanService.jwtBucket(jwt);
log.info("jwt값 : '{}'", jwt);
if(!jwtTokenProvider.validateToken(jwt)){
log.info("토큰만료 : '{}'", jwt);
response.setStatus(401);
return false;
}
return validOverTraffic(bucket, jwt);
}
}
Bucket bucket = pricingPlanService.resolveBucket(request);
return validOverTraffic(bucket, request.getRemoteAddr());
}
@Override
public void postHandle( HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) {
log.info("================ Method Executed");
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception ex) {
log.info("================ Method Completed");
}
private boolean validOverTraffic(Bucket bucket, String data){
if (bucket.tryConsume(1)) { // 1개 사용 요청
// 초과하지 않음
return true;
} else {
// 제한 초과
log.info("{} 트래픽 초과!!!", data);
return false;
}
}
public boolean tokenFilter(HttpServletRequest re){
if(re.getRequestURI().contains("signIn") ||
re.getRequestURI().contains("region/city") ||
re.getRequestURI().contains("region/region")){
return false;
}
return true;
}
}
이제 /sigiIn이나 region/city, region/region에 API에 요청이 오는 것에 대해서는 토큰을 사용하지 않을겁니다.
'개발 > Spring_Boot' 카테고리의 다른 글
Springboot (AOP) 메소드별 실행시간 구하기 (0) | 2021.01.04 |
---|---|
SpringBoot 트래픽 제한하기 (0) | 2020.12.06 |
SpringBoot에서 Docker Redis를 이용해 jwt 로그아웃 처리하기 (0) | 2020.12.05 |
네이버 메일로 SMTP 사용하기 (0) | 2020.11.14 |
Springboot + NAVER S.E.N.S 보내기 (V2 헤더 세팅) (8) | 2020.11.14 |