Spring Cloud Gateway-网关登录校验流程-JWT
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.nio.charset.StandardCharsets;
public class AuthGlobalFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 从请求中获取token
String token = exchange.getRequest().getHeaders().getFirst("Token");
// 验证token的逻辑(示例中简化为是否存在)
if (token == null || token.isEmpty()) {
// 如果token不存在,返回未授权的响应
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.UNAUTHORIZED);
response.getHeaders().set("Content-Type", "application/json;charset=UTF-8");
String errorMsg = "{\"code\":\"401\",\"message\":\"未授权访问!\"}";
DataBufferUtils.write(response.bufferFactory().wrap(errorMsg.getBytes(StandardCharsets.UTF_8)), response.getBody());
return response.setComplete();
}
// 如果token验证通过,继续执行后续过滤器链
return chain.filter(exchange);
}
}
这段代码定义了一个全局过滤器,用于检查请求中是否包含Token。如果Token不存在,则会返回未授权的HTTP响应。这个简化的例子演示了如何在网关中实现基本的JWT验证,而在实际应用中,你需要使用JWT库来解析和验证token的合法性。
评论已关闭