main
黄海 11 months ago
parent bc03bef29f
commit 3050633bb0

@ -1,40 +1,34 @@
package com.dsideal.gw.Controller;
import com.dsideal.gw.Start;
import com.jfinal.core.Controller;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import org.yaml.snakeyaml.Yaml;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
public class ApiController extends Controller {
private final OkHttpClient client = new OkHttpClient();
private List<Map<String, String>> routes;
private final List<Map<String, String>> routes;
public ApiController() {
Yaml yaml = new Yaml();
try (InputStream input = getClass().getClassLoader().getResourceAsStream("application_dev.yaml")) {
if (input == null) {
System.out.println("Sorry, unable to find routes.yaml");
return;
}
Map<String, List<Map<String, String>>> yamlData = yaml.load(input);
routes = yamlData.get("routes");
} catch (IOException ex) {
ex.printStackTrace();
}
Map<String, Object> jfinalConfig = (Map<String, Object>) Start.yamlConfig.get("jfinal");
routes = (List<Map<String, String>>) jfinalConfig.get("routes");
}
public void index() {
String path = getPara(); // 获取请求路径
System.out.println(path);
String path = getRequest().getRequestURI(); // 获取请求路径
if (path.equals("/")) {
renderText("Welcome to JFinal Gateway.");
return;
}
String serviceUrl = route(path); // 根据路径决定转发到哪个微服务
if (serviceUrl == null) {
@ -43,7 +37,9 @@ public class ApiController extends Controller {
}
try {
//方法类型
String method = getRequest().getMethod();
//传递jwt token
Request.Builder requestBuilder = new Request.Builder()
.url(serviceUrl)
.header("Authorization", getHeader("Authorization"));
@ -59,7 +55,9 @@ public class ApiController extends Controller {
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
renderJson(response.body().string());
if (response.body() != null) {
renderJson(response.body().string());
}
} else {
renderJson("error", "服务请求失败");
}
@ -68,6 +66,13 @@ public class ApiController extends Controller {
}
}
/**
*
*
* @param path
* @return
*/
private String route(String path) {
if (routes != null) {
for (Map<String, String> route : routes) {

@ -1,18 +1,47 @@
package com.dsideal.gw.Interceptor;
import com.dsideal.gw.Start;
import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.core.Controller;
import java.util.List;
import java.util.Map;
public class AuthInterceptor implements Interceptor {
//白名单
private final List<String> whitelist;
public AuthInterceptor() {
Map<String, Object> jfinalConfig = (Map<String, Object>) Start.yamlConfig.get("jfinal");
whitelist = (List<String>) jfinalConfig.get("whitelist");
}
/**
*
*
* @param path
* @return
*/
private boolean isWhitelisted(String path) {
if (whitelist != null) {
for (String allowedPath : whitelist) {
if (path.startsWith(allowedPath)) {
return true;
}
}
}
return false;
}
@Override
public void intercept(Invocation inv) {
Controller controller = inv.getController();
String token = controller.getHeader("Authorization");
// 这里添加你的鉴权逻辑,例如检查 token 是否有效
if (!isValidToken(token)) {
controller.renderJson("error", "Unauthorized");
if (!isWhitelisted(controller.getRequest().getRequestURI()) && !isValidToken(token)) {
controller.renderJson("error", "请登录后访问此接口");
} else {
inv.invoke();
}

@ -9,8 +9,24 @@ import com.jfinal.server.undertow.UndertowServer;
import com.jfinal.template.Engine;
import java.io.File;
import java.io.InputStream;
import java.util.Map;
import org.yaml.snakeyaml.Yaml;
public class Start extends JFinalConfig {
public static Map<String, Object> yamlConfig;
//通过构造函数读取配置文件
public Start() {
Yaml yaml = new Yaml();
InputStream input = getClass().getClassLoader().getResourceAsStream("application_dev.yaml");
if (input == null) {
System.out.println("Sorry, unable to find application.yaml");
return;
}
yamlConfig = yaml.load(input);
}
//配置文件
public static void main(String[] args) {
@ -24,6 +40,11 @@ public class Start extends JFinalConfig {
public void configConstant(Constants me) {
//使用LogBack
me.setLogFactory(new LogBackLogFactory());
//开发模式配置,有其它数据库配置时,参考这里的用法
if (yamlConfig != null) {
Map<String, Object> jfinalConfig = (Map<String, Object>) yamlConfig.get("jfinal");
me.setDevMode((boolean) jfinalConfig.get("devMode"));
}
}
/**

@ -1,8 +1,14 @@
# 路由配置
routes:
- prefix: /base
url: http://localhost:9002
jfinal:
# 开发模式
devMode: true
# 路由配置
routes:
- prefix: /base
url: http://localhost:9002
# 白名单
whitelist:
# 根
- /
# 登录接口
- /base/doLogin
# 白名单
whitelist:
- /base/doLogin

@ -1,8 +1,14 @@
# 路由配置
routes:
- prefix: /base
url: http://localhost:9002
jfinal:
# 开发模式
devMode: true
# 路由配置
routes:
- prefix: /base
url: http://localhost:9002
# 白名单
whitelist:
# 根
- /
# 登录接口
- /base/doLogin
# 白名单
whitelist:
- /base/doLogin

Loading…
Cancel
Save