Springcloud GateWay网关配置过程图解

网友投稿 293 2023-02-14

Springcloud GateWay网关配置过程图解

一般为了不暴露自己的端口信息等,会选择架构一个网关在前面进行阻挡,起到保护的作用。附上一张工作示列图。

1.配置网关9527

gateway作为网关需要和其他的应用一样需要注册进eureka中进行管理,先创建应用gateway9527

pom文件,关键是gateway依赖

com.bai

cloud-api-common

${project.version}

org.springframework.cloud

spring-cloud-starter-gateway

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

org.springframework.boot

spring-boot-devtools

runtime

true

org.projectlombok

lombok

true

org.springframework.boot

spring-boot-starter-test

test

yml文件配置

server:

port: 9527

spring:

application:

name: cloud-gateway

cloud:

gateway:

discovery:

locator:

enabled: true # 开启从注册中心动态创建路由的功能,利用微服务名称进行路由

routes:

- id: payment_route # 路由的id,没有规定规则但要求唯一,建议配合服务名

#匹配后提供服务的路由地址

#uri: http://localhost:8001

uri: lb://cloud-payment-service

predicates:

- Path=/payment/get/** # 断言,路径相匹配的进行路由

- id: payment_route2

#uri: http://localhost:8001

uri: lb://cloud-payment-service

predicates:

- Path=/payment/sp/** #断言,路径相匹配的进行路由

eureka:

instance:

hostname: cloud-gateway-service

client:

fetch-registry: true

register-with-eureka: true

service-url:

defaultZone: http://eureka7001.com:7001/eureka/

主启动类正常配置

@SpringBootApplication

@EnableEurekaClient

public class GateWay9527 {

public static void main(String[] args) {

SpringApplication.run(GateWay9527.class,args);

}

}

2.配置路由两种方式

1)yml文件格式(推荐)

spring:

application:

name: cloud-gateway

cloud:

gateway:

discovery:

locator:

enabled: true # 开启从注册中心动态创建路由的功能,利用微服务名称进行路由

routes:

- id: payment_route # 路由的id,没有规定规则但要求唯一,建议配合服务名

#匹配后提供服务的路由地址

#uri: http://localhost:8001

uri: lb://cloud-payment-service

predicates:

- Path=/payment/get/** # 断言,路径相匹配的进行路由

- id: payment_route2

#uri: http://localhost:8001

uri: lb://cloud-payment-service

predicates:

- Path=/payment/sp/** #断言,路径相匹配的进行路由

- After=2020-11-09T11:09:52.794+08:00[Asia/Shanghai]

- Cookie=username,bai #带Cookie,并且username的值为bai

# - Header=X-Request-Id,\d+ #请求头要有 X-Request-Id属性并且值为整数的正则表达式

2)通过config配置类实现

@Configuration

public class RouteConfig {

@Bean

public RouteLocator customerRoute(RouteLocatorBuilder builder){

RouteLocatorBuilder.Builder routes = builder.routes();

routes.route("payment_route1",

r -> r.path("/guonei").uri("http://news.baidu.com/guonei")).build();

return routes.build();

}

@Bean

public RouteLocator bokeRoute(RouteLocatorBuilder builder){

RouteLocatorBuilder.Builder routes = builder.routes();

routes.route("payment_route2",r->r.path("/boke").uri("http://cnblogs.com/lin530/")).build();

return routes.build();

}

}

3.断言(Predicate)

相当于多种限制,只有通过验证才能够访问到对应的方法

- id: payment_route2

#uri: http://localhost:8001

uri: lb://cloud-payment-service

predicates:

- Path=/payment/sp/** #断言,路径相匹配的进行路由

- After=2020-11-09T11:09:52.794+08:00[Asia/Shanghai]

- Cookie=username,bai #带Cookie,并且username的值为bai

# - Header=X-Request-Id,\d+ #请求头要有 X-Request-Id属性并且值为整数的正则表达式

不同的方法http://可以配置不同的断言,此处的断言需要满足路径对,after时间后,cookie带上正确的用户名才可以访问到,用cmd测试

其他还有很多断言,请对照文档自行研究

4)过滤(filter)

对访问加上限制,通过验证才可以访问

新建过滤配置类

@Component

@Slf4j

public class GatewayGlobalFilter implements GlobalFilter, Ordered {

@Override

public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {

log.info("***time is :"TIbwxgV+new Date());

String uname = exchange.getRequest().getQueryParams().getFirst("uname");

if(uname==null){

log.info("没有用户名,出现错误:o(╥﹏╥)o");

exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);

return exchange.getResponse().setComplete();

}

return chain.filter(exchange);

}

/*

设置过滤器优先级,越小优先级越大

*/

@Override

public int getOrder() {

return 0;

}

}

访问方式带上参数,

本篇所有代码均在github:

https://github.com/MaTsukun/springcloud2020

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java中方法递归的简单示例
下一篇:平台api接口(ApI接口)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~