Spring Cloud Gateway使用Token验证详解
程序员文章站
2024-02-28 15:32:22
引入依赖
引入依赖
<dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-dependencies</artifactid> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-gateway</artifactid> </dependency> </dependencies>
自定义过滤器
可以继承 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; @component public class authgatewayfilterfactory extends abstractgatewayfilterfactory<authgatewayfilterfactory.config> { 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; @component public class authglobalfilter implements globalfilter, ordered { @override public mono<void> 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; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: .NET 日志系统设计思路及实现代码
推荐阅读
-
Spring Cloud Gateway使用Token验证详解
-
详解使用Spring Security进行自动登录验证
-
Spring Cloud Gateway全局异常处理的方法详解
-
详解Spring Cloud Stream使用延迟消息实现定时任务(RabbitMQ)
-
Spring Cloud GateWay 路由转发规则介绍详解
-
详解spring cloud hystrix缓存功能的使用
-
详解Spring Cloud Gateway基于服务发现的默认路由规则
-
详解spring cloud hystrix缓存功能的使用
-
详解Spring Cloud Gateway 限流操作
-
Spring MVC中使用Google kaptcha验证码的方法详解