Spring Cloud Gateway 使用 Token 验证
发布日期:2021-06-24 18:22:51 浏览次数:2 分类:技术文章

本文共 3057 字,大约阅读时间需要 10 分钟。

引入依赖

org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.cloud
spring-cloud-starter-gateway

自定义过滤器

可以继承 AbstractGatewayFilterFactory 或实现 GlobalFilter 实现过滤请求功能

GatewayFilter

GatewayFilter 只能指定路径上应用

import org.springframework.cloud.gateway.filter.GatewayFilter;import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;import org.springframework.http.HttpStatus;import org.springframework.http.server.reactive.ServerHttpResponse;import org.springframework.stereotype.Component;@Componentpublic class AuthGatewayFilterFactory extends AbstractGatewayFilterFactory
{ public AuthGatewayFilterFactory() { super(Config.class); } @Override public GatewayFilter apply(Config config) { return (exchange, chain) -> { System.out.println("Welcome to AuthFilter."); String token = exchange.getRequest().getHeaders().getFirst("sign"); if (Config.secret.equals(token)) { return chain.filter(exchange); } ServerHttpResponse response = exchange.getResponse(); response.setStatusCode(HttpStatus.UNAUTHORIZED); return response.setComplete(); }; } static class Config { static String secret = "1234"; }}
spring:  cloud:    gateway:      routes:      - id: service2_route        uri: http://127.0.0.1:8082        predicates:        - Path=/s2/**        filters:        - StripPrefix=1 # 去掉路径的 n 个前缀        - Auth=true # 输入过滤器类的名称前缀

GlobalFilter

GlobalFilter 可以在全局应用

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.http.server.reactive.ServerHttpResponse;import org.springframework.stereotype.Component;import org.springframework.web.server.ServerWebExchange;import reactor.core.publisher.Mono;@Componentpublic class AuthGlobalFilter implements GlobalFilter, Ordered {    @Override    public Mono
filter(ServerWebExchange exchange, GatewayFilterChain chain) { System.out.println("Welcome to AuthGlobalFilter."); ServerHttpRequest request = exchange.getRequest(); String sign = request.getHeaders().get("sign").get(0); String token = "1234"; if(token.equals(sign)) { return chain.filter(exchange); } ServerHttpResponse response = exchange.getResponse(); response.setStatusCode(HttpStatus.UNAUTHORIZED); return response.setComplete(); } @Override public int getOrder() { return 0; }}

转载地址:https://blog.csdn.net/weixin_34248258/article/details/88631869 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Spring源码分析:声明式事务梳理
下一篇:柯里化

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月05日 06时35分37秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章