Spring Cloud Gateway使用Token验证详解
2019-03-28 10:58
986 查看
引入依赖
<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; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- SpringCloud Finchley Gateway 缓存请求Body和Form表单的实现
- spring cloud gateway 限流的实现与原理
- 详解Spring Cloud Gateway 数据库存储路由信息的扩展方案
- 详解SpringCloud Finchley Gateway 统一异常处理
- 详解SpringCloud Gateway之过滤器GatewayFilter
- Spring Cloud Gateway全局异常处理的方法详解
- 详解Spring Cloud Gateway 限流操作
- Spring Cloud Gateway入门解读
- 详解spring cloud构建微服务架构的网关(API GateWay)
相关文章推荐
- Spring Cloud Spring Boot mybatis分布式微服务云架构(二十六)使用MyBatis注解配置详解(1)
- 详解使用spring boot admin监控spring cloud应用程序
- Api Gateway Zuul简介及SpringCloud中的使用
- Spring Cloud Feign简单使用详解
- 详解使用Spring Cloud Consul实现服务的注册和发现
- Spring Cloud Gateway全局异常处理的方法详解
- 前后端分离:使用spring的Aop实现Token验证
- Spring Cloud Spring Boot mybatis分布式微服务云架构(二十七)使用MyBatis注解配置详解(2)
- SpringCloud Feign使用详解
- 详解SpringCloud Gateway之过滤器GatewayFilter
- 详解spring cloud hystrix缓存功能的使用
- 详解Spring Cloud Gateway 限流操作
- 微信公众测试号使用Java Spring MVC,接口配置token验证。
- Spring Cloud中Feign如何统一设置验证token
- 《spring cloud微服务实战》读书笔记——Spring Cloud Hystrix(四)使用详解(二)
- 详解spring cloud Feign使用中遇到的问题总结
- SpringCloud SpringBoot mybatis 分布式微服务(十五)Spring Boot中使用MyBatis注解配置详解
- 详解使用spring boot admin监控spring cloud应用程序
- SpringCloud 中使用 Ribbon的方法详解
- springcloud(十三):Eureka 2.X 停止开发,但注册中心还有更多选择:Consul 使用详解