【Gateway网关接口统一签名】

集成统一签名验证的配置方法

在Spring Cloud Gateway中实现接口统一签名验证,可以通过自定义过滤器和配置管理来实现路径拦截与排除。以下是一个典型的实现方案:

配置拦截路径与排除路径

application.yml中配置需要拦截和排除的路径:

security:
    signature:
    #是否开启验签
    enable: true
    #是否开启日志显示
    logEnable: false
    #过期时间
    expireTime: 60
    #签名算法模型
    algorithm: "SHA256withRSA"
    #验签公钥
    public-key: ""
    #需要验签的路劲
    include-paths:
        - "/superior/**"
        - "/new_applet/**"
    #需要排除的路径
    exclude-paths:
        - "/actuator/**"

自定义签名验证过滤器

创建SignatureValidationFilter实现GlobalFilter接口:

/**
 * @author xiongbing
 * @date 2025/8/15 13:40
 * @description
 */
@Slf4j
@Component
@AllArgsConstructor
public class SignatureValidationFilter extends CommonFilter implements GlobalFilter, Ordered  {
    private final SignatureProperties signatureProperties;
    private static final String TIMESTAMP_HEADER = "X-Timestamp";
    private static final String SIGNATURE_HEADER = "X-Sign";
    private final ObjectMapper objectMapper = new ObjectMapper();
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 检查是否启用签名验证
        if (!signatureProperties.isEnable()) {
            return chain.filter(exchange);
        }
        ServerHttpRequest request = exchange.getRequest();
        String path = request.getPath().value();
        // 检查路径是否需要验证签名
        .....
        .....
        //防重放攻击
        .....
        .....
        //验签
        .....
        .....
        return 验签结果;
    }
    
    @Override
    public int getOrder() {
        // 设置在缓存过滤器之后执行
        return Ordered.HIGHEST_PRECEDENCE + 1;
    }
}

动态配置管理

对于需要动态更新的配置,可以结合配置中心实现:

@RefreshScope
@Configuration
public class SignatureProperties {
    @Value("${security.signature.includePaths}")
    private List<String> includePaths;
    
    @Value("${security.signature.excludePaths}")
    private List<String> excludePaths;
    
    // Getter方法
}

这种实现方式既支持静态配置也支持动态更新,能够灵活处理各种路径匹配需求,同时保持较高的性能表现。

具体请参考源码:https://github.com/xiaobinger/GatewayApiSignature

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值