|
@@ -1,5 +1,8 @@
|
|
|
package com.ytpm.question.config.interceptor;
|
|
package com.ytpm.question.config.interceptor;
|
|
|
|
|
|
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
|
|
+import com.ytpm.handle.CommonException;
|
|
|
|
|
+import com.ytpm.question.redis.RedisService;
|
|
|
import lombok.NonNull;
|
|
import lombok.NonNull;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
@@ -7,20 +10,29 @@ import org.springframework.stereotype.Component;
|
|
|
import org.springframework.web.servlet.HandlerInterceptor;
|
|
import org.springframework.web.servlet.HandlerInterceptor;
|
|
|
import org.springframework.web.servlet.ModelAndView;
|
|
import org.springframework.web.servlet.ModelAndView;
|
|
|
|
|
|
|
|
|
|
+import javax.annotation.Resource;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
|
|
|
|
|
@Slf4j
|
|
@Slf4j
|
|
|
@Component
|
|
@Component
|
|
|
public class HttpInterceptor implements HandlerInterceptor {
|
|
public class HttpInterceptor implements HandlerInterceptor {
|
|
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private RedisService redisService;
|
|
|
|
|
+
|
|
|
@Value("${spring.application.name-zh:}")
|
|
@Value("${spring.application.name-zh:}")
|
|
|
private String applicationNameZh;
|
|
private String applicationNameZh;
|
|
|
|
|
|
|
|
|
|
+ @Value("${spring.application.name:}")
|
|
|
|
|
+ private String applicationName;
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public boolean preHandle(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response,
|
|
public boolean preHandle(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response,
|
|
|
@NonNull Object obj) {
|
|
@NonNull Object obj) {
|
|
|
|
|
+ checkBlackIp(request);
|
|
|
// 获取客户端IP地址
|
|
// 获取客户端IP地址
|
|
|
String clientIp = getClientIp(request);
|
|
String clientIp = getClientIp(request);
|
|
|
String requestURI = request.getRequestURI();
|
|
String requestURI = request.getRequestURI();
|
|
@@ -28,6 +40,18 @@ public class HttpInterceptor implements HandlerInterceptor {
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 黑名单校验
|
|
|
|
|
+ */
|
|
|
|
|
+ private void checkBlackIp(HttpServletRequest request) {
|
|
|
|
|
+ String clientIp = getClientIp(request);
|
|
|
|
|
+ String serviceName = StrUtil.replace(applicationName, "-service", "");
|
|
|
|
|
+ String str = redisService.getStr(StrUtil.format("blackIps:{}", serviceName));
|
|
|
|
|
+ if (StrUtil.isNotEmpty(str) && Arrays.asList(str.split(",")).contains(clientIp)) {
|
|
|
|
|
+ throw new CommonException("not allow request");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private String getClientIp(HttpServletRequest request) {
|
|
private String getClientIp(HttpServletRequest request) {
|
|
|
String xfHeader = request.getHeader("X-Forwarded-For");
|
|
String xfHeader = request.getHeader("X-Forwarded-For");
|
|
|
if (xfHeader == null) {
|
|
if (xfHeader == null) {
|