feat:first commit gateway
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
package com.xiang.xservice.gateway.service.core;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
|
||||
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
public class AuthGlobalFilter implements GlobalFilter, Ordered {
|
||||
|
||||
@Override
|
||||
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
||||
ServerHttpRequest request = exchange.getRequest();
|
||||
String path = request.getURI().getPath();
|
||||
// 放行 /public/** 和 /login
|
||||
if (path.contains("/public/") || path.contains("/login")) {
|
||||
log.debug("跳过 Token 校验: {}", path);
|
||||
return chain.filter(exchange);
|
||||
}
|
||||
|
||||
// 获取 Header 中的 Authorization
|
||||
String token = request.getHeaders().getFirst("Authorization");
|
||||
|
||||
if (!StringUtils.hasText(token)) {
|
||||
log.warn("❌ 缺少 Token: {}", path);
|
||||
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
|
||||
return exchange.getResponse().setComplete();
|
||||
}
|
||||
|
||||
try {
|
||||
// TODO: 这里换成你自己的 JwtUtil.verify(token)
|
||||
// boolean valid = JwtUtil.verify(token);
|
||||
if (false) {
|
||||
log.warn("❌ Token 校验失败: {}", token);
|
||||
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
|
||||
return exchange.getResponse().setComplete();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("❌ Token 校验异常", e);
|
||||
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
|
||||
return exchange.getResponse().setComplete();
|
||||
}
|
||||
|
||||
log.info("✅ Token 校验通过: {}", token);
|
||||
return chain.filter(exchange);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOrder() {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.xiang.xservice.gateway.service.core;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
|
||||
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
||||
import org.springframework.cloud.gateway.route.Route;
|
||||
import org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
public class LoggerGlobalFilter implements GlobalFilter, Ordered {
|
||||
@Override
|
||||
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
||||
log.info("🌐 Gateway 请求进入, 原始请求路径:{}", exchange.getRequest().getURI().getPath());
|
||||
ServerHttpRequest request = exchange.getRequest();
|
||||
InetSocketAddress remoteAddress = request.getRemoteAddress();
|
||||
log.info("请求路径: {} | 方法: {} | 来源: {} | 匹配到路由:{}, 转发目标地址:{}",
|
||||
request.getURI(),
|
||||
request.getMethod(),
|
||||
remoteAddress != null ? remoteAddress.getHostString() : "unknown",
|
||||
exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR),
|
||||
exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR));
|
||||
|
||||
// 继续执行过滤链
|
||||
return chain.filter(exchange)
|
||||
.then(Mono.fromRunnable(() -> {
|
||||
log.info("响应状态: {}", exchange.getResponse().getStatusCode());
|
||||
}));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOrder() {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user