feat: gateway support i18n message
This commit is contained in:
@@ -125,6 +125,16 @@ job.execute.success=The scheduled task was executed successfully, the time taken
|
|||||||
job.execute.spend.time=the time taken: {0} milliseconds
|
job.execute.spend.time=the time taken: {0} milliseconds
|
||||||
## wfc-file
|
## wfc-file
|
||||||
file.cannot.null=File must not be null or empty
|
file.cannot.null=File must not be null or empty
|
||||||
|
## wfc-gateway
|
||||||
|
gateway.token.not.blank=Token cannot be blank
|
||||||
|
gateway.token.expired=Token has expired or verification is incorrect
|
||||||
|
gateway.status.expired=Login status has expired
|
||||||
|
gateway.token.error=Token error
|
||||||
|
gateway.user.portal.forbidden=User portal is forbidden to access
|
||||||
|
gateway.internal.server.error=Internal server error
|
||||||
|
gateway.service.not.found=Service not found
|
||||||
|
gateway.request.address.forbidden=Request address is not allowed to access
|
||||||
|
gateway.request.limit=Request limit exceeded, please try again later
|
||||||
|
|
||||||
## wfc-common
|
## wfc-common
|
||||||
common.operate.success=Operation successful
|
common.operate.success=Operation successful
|
||||||
|
|||||||
@@ -125,6 +125,16 @@ job.execute.success=The scheduled task was executed successfully, the time taken
|
|||||||
job.execute.spend.time=the time taken: {0} milliseconds
|
job.execute.spend.time=the time taken: {0} milliseconds
|
||||||
## wfc-file
|
## wfc-file
|
||||||
file.cannot.null=File must not be null or empty
|
file.cannot.null=File must not be null or empty
|
||||||
|
## wfc-gateway
|
||||||
|
gateway.token.not.blank=Token cannot be blank
|
||||||
|
gateway.token.expired=Token has expired or verification is incorrect
|
||||||
|
gateway.status.expired=Login status has expired
|
||||||
|
gateway.token.error=Token error
|
||||||
|
gateway.user.portal.forbidden=User portal is forbidden to access
|
||||||
|
gateway.internal.server.error=Internal server error
|
||||||
|
gateway.service.not.found=Service not found
|
||||||
|
gateway.request.address.forbidden=Request address is not allowed to access
|
||||||
|
gateway.request.limit=Request limit exceeded, please try again later
|
||||||
|
|
||||||
## wfc-common
|
## wfc-common
|
||||||
common.operate.success=Operation successful
|
common.operate.success=Operation successful
|
||||||
|
|||||||
@@ -126,6 +126,16 @@ job.execute.success=定时任务执行成功, 耗时:{0} 毫秒
|
|||||||
job.execute.spend.time=总共耗时:{0} 毫秒
|
job.execute.spend.time=总共耗时:{0} 毫秒
|
||||||
## wfc-file
|
## wfc-file
|
||||||
file.cannot.null=文件不能为空
|
file.cannot.null=文件不能为空
|
||||||
|
## wfc-gateway
|
||||||
|
gateway.token.not.blank=令牌不能为空
|
||||||
|
gateway.token.expired=令牌已过期或验证不正确
|
||||||
|
gateway.status.expired=登录状态已过期
|
||||||
|
gateway.token.error=令牌验证失败
|
||||||
|
gateway.user.portal.forbidden=用户平台禁止访问
|
||||||
|
gateway.internal.server.error=内部服务器错误
|
||||||
|
gateway.service.not.found=服务未找到
|
||||||
|
gateway.request.address.forbidden=请求地址不允许访问
|
||||||
|
gateway.request.limit=请求超过最大数,请稍候再试
|
||||||
|
|
||||||
## wfc-common
|
## wfc-common
|
||||||
common.operate.success=操作成功
|
common.operate.success=操作成功
|
||||||
|
|||||||
@@ -15,6 +15,6 @@ public class WfcGatewayApplication
|
|||||||
public static void main(String[] args)
|
public static void main(String[] args)
|
||||||
{
|
{
|
||||||
SpringApplication.run(WfcGatewayApplication.class, args);
|
SpringApplication.run(WfcGatewayApplication.class, args);
|
||||||
System.out.println("(♥◠‿◠)ノ゙ 网关启动成功 ლ(´ڡ`ლ)゙ \n");
|
System.out.println("(♥◠‿◠)ノ゙ Gateway started successfully ლ(´ڡ`ლ)゙ \n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ public class GatewayConfig
|
|||||||
*/
|
*/
|
||||||
@Bean
|
@Bean
|
||||||
public RouterFunction<ServerResponse> healthCheckRoute() {
|
public RouterFunction<ServerResponse> healthCheckRoute() {
|
||||||
// TODO: Implement a health check endpoint
|
// Implement a health check endpoint
|
||||||
return RouterFunctions.route(RequestPredicates.GET("/health"),
|
return RouterFunctions.route(RequestPredicates.GET("/health"),
|
||||||
request -> ServerResponse.status(HttpStatus.OK)
|
request -> ServerResponse.status(HttpStatus.OK)
|
||||||
.body(BodyInserters.fromValue("Gateway is healthy"))
|
.body(BodyInserters.fromValue("Gateway is healthy"))
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import org.wfc.common.core.constant.HttpStatus;
|
|||||||
import org.wfc.common.core.constant.SecurityConstants;
|
import org.wfc.common.core.constant.SecurityConstants;
|
||||||
import org.wfc.common.core.constant.TokenConstants;
|
import org.wfc.common.core.constant.TokenConstants;
|
||||||
import org.wfc.common.core.utils.JwtUtils;
|
import org.wfc.common.core.utils.JwtUtils;
|
||||||
|
import org.wfc.common.core.utils.MessageUtils;
|
||||||
import org.wfc.common.core.utils.ServletUtils;
|
import org.wfc.common.core.utils.ServletUtils;
|
||||||
import org.wfc.common.core.utils.StringUtils;
|
import org.wfc.common.core.utils.StringUtils;
|
||||||
import org.wfc.common.redis.service.RedisService;
|
import org.wfc.common.redis.service.RedisService;
|
||||||
@@ -58,29 +59,29 @@ public class AuthFilter implements GlobalFilter, Ordered
|
|||||||
String token = getToken(request);
|
String token = getToken(request);
|
||||||
if (StringUtils.isEmpty(token))
|
if (StringUtils.isEmpty(token))
|
||||||
{
|
{
|
||||||
return unauthorizedResponse(exchange, "令牌不能为空");
|
return unauthorizedResponse(exchange, MessageUtils.message("gateway.token.not.blank"));
|
||||||
}
|
}
|
||||||
Claims claims = JwtUtils.parseToken(token);
|
Claims claims = JwtUtils.parseToken(token);
|
||||||
if (claims == null)
|
if (claims == null)
|
||||||
{
|
{
|
||||||
return unauthorizedResponse(exchange, "令牌已过期或验证不正确!");
|
return unauthorizedResponse(exchange, MessageUtils.message("gateway.token.expired"));
|
||||||
}
|
}
|
||||||
String userkey = JwtUtils.getUserKey(claims);
|
String userkey = JwtUtils.getUserKey(claims);
|
||||||
boolean islogin = redisService.hasKey(getTokenKey(userkey));
|
boolean islogin = redisService.hasKey(getTokenKey(userkey));
|
||||||
if (!islogin)
|
if (!islogin)
|
||||||
{
|
{
|
||||||
return unauthorizedResponse(exchange, "登录状态已过期");
|
return unauthorizedResponse(exchange, MessageUtils.message("gateway.status.expired"));
|
||||||
}
|
}
|
||||||
String userid = JwtUtils.getUserId(claims);
|
String userid = JwtUtils.getUserId(claims);
|
||||||
String username = JwtUtils.getUserName(claims);
|
String username = JwtUtils.getUserName(claims);
|
||||||
if (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username))
|
if (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username))
|
||||||
{
|
{
|
||||||
return unauthorizedResponse(exchange, "令牌验证失败");
|
return unauthorizedResponse(exchange, MessageUtils.message("gateway.token.error"));
|
||||||
}
|
}
|
||||||
String platform = JwtUtils.getUserPlatform(claims);
|
String platform = JwtUtils.getUserPlatform(claims);
|
||||||
if ("user".equals(platform) && StringUtils.startsWith(url,"/system"))
|
if ("user".equals(platform) && StringUtils.startsWith(url,"/system"))
|
||||||
{
|
{
|
||||||
return unauthorizedResponse(exchange, "用户平台禁止访问");
|
return unauthorizedResponse(exchange, MessageUtils.message("gateway.user.portal.forbidden"));
|
||||||
}
|
}
|
||||||
// 设置用户信息到请求
|
// 设置用户信息到请求
|
||||||
addHeader(mutate, SecurityConstants.USER_KEY, userkey);
|
addHeader(mutate, SecurityConstants.USER_KEY, userkey);
|
||||||
@@ -114,7 +115,7 @@ public class AuthFilter implements GlobalFilter, Ordered
|
|||||||
|
|
||||||
private Mono<Void> unauthorizedResponse(ServerWebExchange exchange, String msg)
|
private Mono<Void> unauthorizedResponse(ServerWebExchange exchange, String msg)
|
||||||
{
|
{
|
||||||
log.error("[鉴权异常处理]请求路径:{},错误信息:{}", exchange.getRequest().getPath(), msg);
|
log.error("[Authentication exception handling]Request path:{}, error message:{}", exchange.getRequest().getPath(), msg);
|
||||||
return ServletUtils.webFluxResponseWriter(exchange.getResponse(), msg, HttpStatus.UNAUTHORIZED);
|
return ServletUtils.webFluxResponseWriter(exchange.getResponse(), msg, HttpStatus.UNAUTHORIZED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import java.util.regex.Pattern;
|
|||||||
import org.springframework.cloud.gateway.filter.GatewayFilter;
|
import org.springframework.cloud.gateway.filter.GatewayFilter;
|
||||||
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
|
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.wfc.common.core.utils.MessageUtils;
|
||||||
import org.wfc.common.core.utils.ServletUtils;
|
import org.wfc.common.core.utils.ServletUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -24,7 +25,7 @@ public class BlackListUrlFilter extends AbstractGatewayFilterFactory<BlackListUr
|
|||||||
String url = exchange.getRequest().getURI().getPath();
|
String url = exchange.getRequest().getURI().getPath();
|
||||||
if (config.matchBlacklist(url))
|
if (config.matchBlacklist(url))
|
||||||
{
|
{
|
||||||
return ServletUtils.webFluxResponseWriter(exchange.getResponse(), "请求地址不允许访问");
|
return ServletUtils.webFluxResponseWriter(exchange.getResponse(), MessageUtils.message("gateway.request.address.forbidden"));
|
||||||
}
|
}
|
||||||
|
|
||||||
return chain.filter(exchange);
|
return chain.filter(exchange);
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import org.springframework.core.annotation.Order;
|
|||||||
import org.springframework.http.server.reactive.ServerHttpResponse;
|
import org.springframework.http.server.reactive.ServerHttpResponse;
|
||||||
import org.springframework.web.server.ResponseStatusException;
|
import org.springframework.web.server.ResponseStatusException;
|
||||||
import org.springframework.web.server.ServerWebExchange;
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
|
import org.wfc.common.core.utils.MessageUtils;
|
||||||
import org.wfc.common.core.utils.ServletUtils;
|
import org.wfc.common.core.utils.ServletUtils;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
@@ -37,7 +38,7 @@ public class GatewayExceptionHandler implements ErrorWebExceptionHandler
|
|||||||
|
|
||||||
if (ex instanceof NotFoundException)
|
if (ex instanceof NotFoundException)
|
||||||
{
|
{
|
||||||
msg = "服务未找到";
|
msg = MessageUtils.message("gateway.service.not.found");
|
||||||
}
|
}
|
||||||
else if (ex instanceof ResponseStatusException)
|
else if (ex instanceof ResponseStatusException)
|
||||||
{
|
{
|
||||||
@@ -46,10 +47,10 @@ public class GatewayExceptionHandler implements ErrorWebExceptionHandler
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg = "内部服务器错误";
|
msg = MessageUtils.message("gateway.internal.server.error");
|
||||||
}
|
}
|
||||||
|
|
||||||
log.error("[网关异常处理]请求路径:{},异常信息:{}", exchange.getRequest().getPath(), ex.getMessage());
|
log.error("[Gateway Exception Handling] Request path: {}, exception: {}", exchange.getRequest().getPath(), ex.getMessage());
|
||||||
|
|
||||||
return ServletUtils.webFluxResponseWriter(response, msg);
|
return ServletUtils.webFluxResponseWriter(response, msg);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ package org.wfc.gateway.handler;
|
|||||||
|
|
||||||
import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.GatewayCallbackManager;
|
import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.GatewayCallbackManager;
|
||||||
import com.alibaba.csp.sentinel.slots.block.BlockException;
|
import com.alibaba.csp.sentinel.slots.block.BlockException;
|
||||||
|
|
||||||
|
import org.wfc.common.core.utils.MessageUtils;
|
||||||
import org.wfc.common.core.utils.ServletUtils;
|
import org.wfc.common.core.utils.ServletUtils;
|
||||||
import org.springframework.web.reactive.function.server.ServerResponse;
|
import org.springframework.web.reactive.function.server.ServerResponse;
|
||||||
import org.springframework.web.server.ServerWebExchange;
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
@@ -17,7 +19,8 @@ public class SentinelFallbackHandler implements WebExceptionHandler
|
|||||||
{
|
{
|
||||||
private Mono<Void> writeResponse(ServerResponse response, ServerWebExchange exchange)
|
private Mono<Void> writeResponse(ServerResponse response, ServerWebExchange exchange)
|
||||||
{
|
{
|
||||||
return ServletUtils.webFluxResponseWriter(exchange.getResponse(), "请求超过最大数,请稍候再试");
|
return ServletUtils.webFluxResponseWriter(exchange.getResponse(),
|
||||||
|
MessageUtils.message("gateway.request.limit"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user