微服务项目在gateway网关配置路径访问白名单

本文介绍了如何在微服务项目中,通过自定义GlobalFilter和Ordered接口实现网关鉴权。过滤器逻辑主要在filter方法中定义,通过getOrder方法控制执行顺序。示例代码展示了如何创建一个用户登录过滤器,并添加了静态资源访问的免登录白名单设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网关的鉴权:权限身份认证作用实际上就是由一串组合起来的过滤器实现的,
过滤器的自定义过程就是实现两个接口org.springframework.cloud.gateway.filter.GlobalFilter和org.springframework.core.Ordered

通过重写org.springframework.cloud.gateway.filter.GlobalFilter中的filter方法来定义过滤的逻辑

通过重写org.springframework.core.Ordered中的getOrder方法来决定该自定义过滤器在过滤器执行链GatewayFilterChain chain中的过滤顺序,其中getOrder方法return的值越小越先执行

下面通过一个自定义的例子来演示如何自定义一个网关的过滤器:

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.juyuansoft.constant.SecurityConstants;
import com.juyuansoft.security.JyAuthHeaders;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtException;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import com.juyuansoft.core.Result;
import com.juyuansoft.core.ResultCode;
import com.juyuansoft.uitl.JwtUtils;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core
### 配置 Spring Cloud Gateway 白名单Spring Cloud Gateway 中设置 IP 白名单可以通过自定义过滤器来完成。以下是详细的配置方法: #### 1. 自定义全局过滤器 通过创建一个 `GlobalFilter` 来拦截请求并验证客户端的 IP 地址是否属于白名单。 ```java 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.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; @Component public class IpWhiteListFilter implements GlobalFilter, Ordered { private final String[] whiteList = {"127.0.0.1", "192.168.1.1"}; // 定义白名单 @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { String ip = exchange.getRequest().getRemoteAddress().getHostString(); // 获取客户端IP地址 boolean isAllowed = false; for (String allowedIp : whiteList) { if (allowedIp.equals(ip)) { isAllowed = true; break; } } if (!isAllowed) { exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN); return exchange.getResponse().setComplete(); } return chain.filter(exchange); // 如果允许,则继续处理链路 } @Override public int getOrder() { return -1; // 设置优先级,越低越先执行 } } ``` 此代码片段实现了基于 IP 的访问控制逻辑[^1]。 #### 2. YML 文件中的基础配置 虽然官方文档并未提供直接针对 IP 白名单的功能支持,但仍需确保网关的基础路由功能正常运行。以下是一个简单的 YAML 路由配置示例: ```yaml spring: cloud: gateway: routes: - id: example_route uri: http://example.org predicates: - Path=/example/** ``` 上述配置指定了一个基本的路由规则,用于匹配路径 `/example/**` 并将其转发到目标 URI。 #### 3. 启动类配置 为了使 Spring Cloud Gateway 正常工作,还需要在启动类上添加必要的注解以启用服务发现等功能。例如,在项目入口处可以这样写: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } } ``` 这段代码启用了服务注册与发现的支持,便于后续扩展其他微服务架构下的功能需求[^4]。 #### 4. 动态调整白名单 如果希望实现更灵活的管理方式(比如从数据库读取或者远程调用获取最新的白名单列表),则可以在初始化阶段加载这些数据源,并定期刷新缓存内容。具体实现取决于实际业务场景和技术栈的选择[^3]。 --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值