main
黄海 10 months ago
parent e7da58a0b4
commit 68b06df9f1

@ -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!");
}
}

@ -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<String, String> routeDict = new HashMap<>();
public static Map<String, String> routeList = new HashMap<>();
//白名单
public static Set<String> 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<Object, Object> entry : prop.getProperties().entrySet()) {
for (Map.Entry<Object, Object> 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<String> 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

@ -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
*
* <p>
* 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

@ -10,3 +10,4 @@ route:
# 白名单
whitelist:
- /ds-base/doLogin
- /ds-resource/doLogin

@ -10,3 +10,4 @@ route:
# 白名单
whitelist:
- /ds-base/doLogin
- /ds-resource/doLogin

Loading…
Cancel
Save