SpringCloud Gateway网关为认证中心和用户微服务构建统一的认证授权入口
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;
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 || "".equals(token)) {
// Token不存在,返回401 Unauthorized
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.UNAUTHORIZED);
// 可以返回JSON格式的错误信息
return DataBufferUtils.write(response.bufferFactory(), "Token is missing", response.getBufferFactory().allocateBuffer().allocateBuffer())
.doOnNext(response.bufferFactory()::wrap);
}
// Token存在,继续向下执行
return chain.filter(exchange);
}
}
这段代码定义了一个全局过滤器,用于检查每个请求是否包含Token。如果Token不存在,则响应401 Unauthorized错误。这种方式可以用来保护微服务不受未授权的访问。
评论已关闭