From 68b06df9f1a418300afc122d093503fe7e2cb9b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Fri, 20 Sep 2024 13:45:41 +0800 Subject: [PATCH] 'commit' --- .../dsideal/gw/Contoller/IndexController.java | 10 +++++++ .../java/com/dsideal/gw/GwApplication.java | 30 ++++++++++++++----- .../com/dsideal/gw/Handler/RouterHandler.java | 20 ++++++++++--- ds-gw/src/main/resources/application_dev.yaml | 1 + ds-gw/target/classes/application_dev.yaml | 1 + 5 files changed, 51 insertions(+), 11 deletions(-) create mode 100644 ds-gw/src/main/java/com/dsideal/gw/Contoller/IndexController.java diff --git a/ds-gw/src/main/java/com/dsideal/gw/Contoller/IndexController.java b/ds-gw/src/main/java/com/dsideal/gw/Contoller/IndexController.java new file mode 100644 index 00000000..1af00b2d --- /dev/null +++ b/ds-gw/src/main/java/com/dsideal/gw/Contoller/IndexController.java @@ -0,0 +1,10 @@ +package com.dsideal.gw.Contoller; + +import com.jfinal.core.Controller; + +public class IndexController extends Controller { + + public void index() { + renderText("Welcome to DsGw!"); + } +} diff --git a/ds-gw/src/main/java/com/dsideal/gw/GwApplication.java b/ds-gw/src/main/java/com/dsideal/gw/GwApplication.java index a3ea5fea..07f2800c 100644 --- a/ds-gw/src/main/java/com/dsideal/gw/GwApplication.java +++ b/ds-gw/src/main/java/com/dsideal/gw/GwApplication.java @@ -1,20 +1,28 @@ package com.dsideal.gw; import cn.hutool.core.io.FileUtil; +import cn.hutool.json.JSONUtil; +import com.dsideal.gw.Contoller.IndexController; import com.dsideal.gw.Handler.RouterHandler; import com.dsideal.gw.Plugin.YamlProp; import com.dsideal.gw.Util.LogBackLogFactory; import com.jfinal.config.*; import com.jfinal.kit.Prop; +import com.jfinal.kit.PropKit; import com.jfinal.server.undertow.UndertowServer; import com.jfinal.template.Engine; +import org.yaml.snakeyaml.Yaml; import java.io.File; -import java.util.HashMap; -import java.util.Map; +import java.util.*; public class GwApplication extends JFinalConfig { + /** + * 功能:获取是否为开发环境 + * + * @return + */ public static String getEnvPrefix() { String myEnvVar = System.getenv("WORKING_ENV"); return myEnvVar == null ? "dev" : "pro"; @@ -30,7 +38,9 @@ public class GwApplication extends JFinalConfig { * 配置常量 */ //路由表 - public static Map routeDict = new HashMap<>(); + public static Map routeList = new HashMap<>(); + //白名单 + public static Set whiteSet = new HashSet<>(); @Override public void configConstant(Constants me) { @@ -38,13 +48,19 @@ public class GwApplication extends JFinalConfig { me.setLogFactory(new LogBackLogFactory()); //加载配置文件 String configFile = "application_{?}.yaml".replace("{?}", getEnvPrefix()); - Prop prop = new YamlProp(configFile); + Prop PropKit = new YamlProp(configFile); // 获取所有配置项,得到路由表 - for (Map.Entry entry : prop.getProperties().entrySet()) { + for (Map.Entry entry : PropKit.getProperties().entrySet()) { if (entry.getKey().toString().startsWith("route")) { - routeDict.put(entry.getKey().toString().substring(6), entry.getValue().toString()); + routeList.put(entry.getKey().toString().substring(6).replace(".url",""), entry.getValue().toString()); } } + // 获取白名单链接列表 + Yaml yaml = new Yaml(); + List whitelist = yaml.load(PropKit.get("whitelist")); + for (String url : whitelist) { + whiteSet.add(url); + } } /** @@ -52,7 +68,7 @@ public class GwApplication extends JFinalConfig { */ @Override public void configRoute(Routes me) { - + me.add("/", IndexController.class); } @Override diff --git a/ds-gw/src/main/java/com/dsideal/gw/Handler/RouterHandler.java b/ds-gw/src/main/java/com/dsideal/gw/Handler/RouterHandler.java index d73c6c08..765bba28 100644 --- a/ds-gw/src/main/java/com/dsideal/gw/Handler/RouterHandler.java +++ b/ds-gw/src/main/java/com/dsideal/gw/Handler/RouterHandler.java @@ -38,10 +38,9 @@ public class RouterHandler extends Handler { * GET * http://10.10.21.20:8000/ds-base/dm/getDmSchoolProperty * http://10.10.21.20:8000/ds-base/global/getGlobalList?page=1&limit=10 - * + *

* POST * http://10.10.21.20:8000/ds-base/global/testPost?a=100 - * */ //OkHttp的实例,单例模式 @@ -61,6 +60,7 @@ public class RouterHandler extends Handler { renderJson(res, jo); } } + public static RequestBody createRequestBody(HttpServletRequest req) { FormBody.Builder formBodyBuilder = new FormBody.Builder(); // 遍历请求中的参数 @@ -73,12 +73,24 @@ public class RouterHandler extends Handler { // 构建RequestBody return formBodyBuilder.build(); } + @Override public void handle(String target, HttpServletRequest req, HttpServletResponse res, boolean[] isHandled) { //可以正确获取到URL的完整路径 String servletPath = req.getServletPath(); String queryString = req.getQueryString(); + //对于根目录的访问,放行 + if (servletPath.equals("/")) { + next.handle(target, req, res, isHandled); + return; + } + //如果是白名单,不检查jwt,否则需要检查jwt + if (GwApplication.whiteSet.contains(servletPath)) { + System.out.println("白名单内链接,不检查jwt!"); + } else { + System.out.println("不包含在白名单内链接,检查jwt!"); + } //路由到哪个微服务 int firstSlashIndex = servletPath.indexOf('/'); // 找到第一个 '/' 的索引 @@ -89,14 +101,14 @@ public class RouterHandler extends Handler { if (firstSlashIndex != -1 && secondSlashIndex != -1) { String prefix = servletPath.substring(firstSlashIndex + 1, secondSlashIndex); // 截取两个 '/' 之间的内容 - if (!GwApplication.routeDict.containsKey(prefix)) { + if (!GwApplication.routeList.containsKey(prefix)) { JSONObject jo = new JSONObject(); jo.put("success", false); jo.put("message", prefix + "前缀没有找到合适的路由表,请检查是否请求正确!"); renderJson(res, jo); } else { //路由到哪个微服务 - String FORWARD_URL = GwApplication.routeDict.get(prefix) + "/" + action; + String FORWARD_URL = GwApplication.routeList.get(prefix) + "/" + action; //处理GET请求 if (req.getMethod().equals("GET")) { //参数:queryString diff --git a/ds-gw/src/main/resources/application_dev.yaml b/ds-gw/src/main/resources/application_dev.yaml index 2cf328f9..c92cf14d 100644 --- a/ds-gw/src/main/resources/application_dev.yaml +++ b/ds-gw/src/main/resources/application_dev.yaml @@ -10,3 +10,4 @@ route: # 白名单 whitelist: - /ds-base/doLogin + - /ds-resource/doLogin diff --git a/ds-gw/target/classes/application_dev.yaml b/ds-gw/target/classes/application_dev.yaml index 2cf328f9..c92cf14d 100644 --- a/ds-gw/target/classes/application_dev.yaml +++ b/ds-gw/target/classes/application_dev.yaml @@ -10,3 +10,4 @@ route: # 白名单 whitelist: - /ds-base/doLogin + - /ds-resource/doLogin