From 8ad94ef58f7dc61cc97b9e6c084b9efaa8eee4db Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期二, 11 七月 2023 10:57:39 +0800
Subject: [PATCH] 1

---
 src/main/java/com/moon/server/controller/sys/ProxyController.java |   48 ++++++++++++++++
 src/main/java/com/moon/server/service/sys/ProxyService.java       |  109 +++++++++++-------------------------
 2 files changed, 82 insertions(+), 75 deletions(-)

diff --git a/src/main/java/com/moon/server/controller/sys/ProxyController.java b/src/main/java/com/moon/server/controller/sys/ProxyController.java
new file mode 100644
index 0000000..b75d2e3
--- /dev/null
+++ b/src/main/java/com/moon/server/controller/sys/ProxyController.java
@@ -0,0 +1,48 @@
+package com.moon.server.controller.sys;
+
+import com.moon.server.helper.WebHelper;
+import com.moon.server.service.sys.ProxyService;
+import com.sun.istack.NotNull;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 浠g悊鏈嶅姟
+ * @author WWW
+ * @date 2023-07-11
+ */
+@Api(tags = "杩愮淮绠$悊\\浠g悊鏈嶅姟")
+@RestController
+@RequestMapping("/proxy")
+public class ProxyController {
+    @Resource
+    ProxyService proxyService;
+
+    private static final Log log = LogFactory.getLog(ProxyController.class);
+
+    @ApiOperation(value = "URL浠g悊", notes = "URL浠g悊")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "token", value = "浠ょ墝", dataType = "String", paramType = "path", required = true, example = "1eb2ea8f-5cfd-4e6c-95c9-17ab0f7bce71"),
+            @ApiImplicitParam(name = "id", value = "ID", dataType = "int", paramType = "path", required = true, example = "1"),
+    })
+    @RequestMapping(value = {"/{token}/{id}/**"})
+    public void proxyUrl(@NotNull @PathVariable String token, @NotNull @PathVariable int id, HttpServletRequest req, HttpServletResponse res) {
+        try {
+            proxyService.proxyUrl(token, id, req, res);
+        } catch (Exception ex) {
+            log.error(ex.getMessage(), ex);
+            WebHelper.writeStr2Page(res, ex.getMessage());
+        }
+    }
+}
diff --git a/src/main/java/com/moon/server/interceptor/ProxyFilter.java b/src/main/java/com/moon/server/service/sys/ProxyService.java
similarity index 70%
rename from src/main/java/com/moon/server/interceptor/ProxyFilter.java
rename to src/main/java/com/moon/server/service/sys/ProxyService.java
index 1e729db..9abc355 100644
--- a/src/main/java/com/moon/server/interceptor/ProxyFilter.java
+++ b/src/main/java/com/moon/server/service/sys/ProxyService.java
@@ -1,4 +1,4 @@
-package com.moon.server.interceptor;
+package com.moon.server.service.sys;
 
 import com.alibaba.fastjson.JSON;
 import com.moon.server.entity.all.HttpStatus;
@@ -12,27 +12,25 @@
 import com.moon.server.helper.HttpHelper;
 import com.moon.server.helper.StringHelper;
 import com.moon.server.helper.WebHelper;
+import com.moon.server.interceptor.AuthInterceptor;
 import com.moon.server.service.all.PermsService;
 import com.moon.server.service.all.SysService;
-import com.moon.server.service.sys.ResLogService;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import javax.servlet.*;
-import javax.servlet.annotation.WebFilter;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 import java.util.TimerTask;
 
 /**
- * 浠g悊杩囨护鍣�
+ * 浠g悊鏈嶅姟绫�
  * @author WWW
- * @date 2023-07-04
+ * @date 2023-07-11
  */
-@WebFilter(urlPatterns = {"/proxy/*"})
-public class ProxyFilter implements Filter {
+@Service
+public class ProxyService {
+
     @Resource
     private SysService sysService;
 
@@ -42,60 +40,29 @@
     @Resource
     private ResLogService resLogService;
 
-    private final static int LEN = "/proxy/".length();
-
-    private static final Log log = LogFactory.getLog(ProxyFilter.class);
-
     public static final String ILLEGAL_RESOURCE = JSON.toJSONString(new ResponseMsg<String>(HttpStatus.UNAUTHORIZED, "娌℃湁璧勬簮璁块棶鏉冮檺"));
 
-    @Override
-    public void init(FilterConfig filterConfig) {
-    }
-
-    @Override
-    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
-        try {
-            HttpServletRequest req = (HttpServletRequest) request;
-            HttpServletResponse res = (HttpServletResponse) response;
-
-            // 2.鑾峰彇浠ょ墝
-            String token = getToken(req);
-
-            // 3.鑾峰彇鐢ㄦ埛
-            UserEntity ue = getUser(res, token);
-            if (null == ue) {
-                return;
-            }
-
-            int resId = getResId(req.getRequestURI(), LEN + token.length() + 1);
-            if (!check(req, res, ue, token)) {
-                return;
-            }
-
-            // 9.鑾峰彇璧勬簮瀹炰綋
-            ResEntity entity = getResEntity(ue, resId);
-            if (null == entity) {
-                WebHelper.writeStr2Page(res, ILLEGAL_RESOURCE);
-                return;
-            }
-
-            insertLog(req, ue, resId);
-            String url = getSourceUrl(req, entity);
-            proxy(req, res, url);
-        } catch (Exception ex) {
-            log.error(ex.getMessage(), ex);
-        }
-    }
-
-    @Override
-    public void destroy() {
-    }
-
     /**
-     * 鑾峰彇浠ょ墝
+     * URL浠g悊
      */
-    private String getToken(HttpServletRequest req) {
-        return req.getRequestURI().substring(LEN, req.getRequestURI().indexOf("/", LEN));
+    public void proxyUrl(String token, int resId, HttpServletRequest req, HttpServletResponse res) throws Exception {
+        // 3.鑾峰彇鐢ㄦ埛
+        UserEntity ue = getUser(res, token);
+        if (null == ue) {
+            return;
+        }
+
+        // 9.鑾峰彇璧勬簮瀹炰綋
+        ResEntity entity = getResEntity(ue, resId);
+        if (null == entity) {
+            WebHelper.writeStr2Page(res, ILLEGAL_RESOURCE);
+            return;
+        }
+
+        insertLog(req, ue, resId);
+
+        String url = getSourceUrl(req, entity, token);
+        forward(req, res, url);
     }
 
     /**
@@ -109,16 +76,6 @@
         }
 
         return ue;
-    }
-
-    /**
-     * 鑾峰彇璧勬簮ID
-     */
-    private int getResId(String uri, int start) {
-        int end = uri.indexOf("/", start);
-        String str = -1 == end ? uri.substring(start) : uri.substring(start, end);
-
-        return Integer.parseInt(str);
     }
 
     /**
@@ -203,7 +160,7 @@
             return null;
         }
 
-        // List<ResEntity> list = rs.stream().filter(resEntity -> resEntity.getId() == resId).collect(Collectors.toList());
+        // List<ResEntity> list = rs.stream().filter(resEntity -> resEntity.getId() == resId).collect(Collectors.toList())
         for (ResEntity entity : rs) {
             if (resId == entity.getId()) {
                 return entity;
@@ -265,15 +222,17 @@
     /**
      * 鑾峰彇鍘熷Url
      */
-    private String getSourceUrl(HttpServletRequest req, ResEntity entity) {
+    private String getSourceUrl(HttpServletRequest req, ResEntity entity, String token) {
+        String proxyUrl = entity.getProxy().replace("{token}", token);
+        int end = req.getRequestURL().indexOf(proxyUrl) + proxyUrl.length();
 
-        return "";
+        return entity.getUrl() + req.getRequestURL().substring(end);
     }
 
     /**
-     * 浠g悊鏈嶅姟
+     * 杞彂璇锋眰
      */
-    private void proxy(HttpServletRequest request, HttpServletResponse response, String url) throws Exception {
+    private void forward(HttpServletRequest request, HttpServletResponse response, String url) throws Exception {
         HttpHelper httpHelper = new HttpHelper();
         httpHelper.service(request, response, url, null);
     }

--
Gitblit v1.9.3