Browse Source

更新对 referer 的处理, 以 referer 为前缀进行匹配

reghao 2 years ago
parent
commit
52473889c9

+ 13 - 3
oss-store/src/main/java/cn/reghao/oss/store/inerceptor/AccessLogInterceptor.java

@@ -9,7 +9,7 @@ import org.springframework.web.servlet.ModelAndView;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.util.Set;
+import java.util.List;
 
 /**
  * 访问日志拦截器
@@ -20,7 +20,7 @@ import java.util.Set;
 @Slf4j
 @Component
 public class AccessLogInterceptor implements HandlerInterceptor {
-    private final Set<String> refererSet = Set.of(
+    private final List<String> list = List.of(
             "https://bili.reghao.cn/",
             "https://admin.reghao.cn/",
             "https://account.reghao.cn/");
@@ -37,7 +37,7 @@ public class AccessLogInterceptor implements HandlerInterceptor {
             return true;
         }
 
-        if (referer == null || !refererSet.contains(referer)) {
+        if (referer == null || !hasPrefix(referer)) {
             log.info("request {} from {}", uri, referer);
             response.setStatus(403);
             return false;
@@ -46,6 +46,16 @@ public class AccessLogInterceptor implements HandlerInterceptor {
         return true;
     }
 
+    private boolean hasPrefix(String referer) {
+        for (String prefix : list) {
+            if (referer.startsWith(prefix)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
     @Override
     public void postHandle(HttpServletRequest request, HttpServletResponse response,
                            Object handler, @Nullable ModelAndView modelAndView) throws Exception {