gateway网关

本文介绍了如何配置Gateway网关,包括创建数据库、设定MySQL存储、配置集群文件、启动Nacos集群模式,以及微服务注册到Nacos集群,并通过Nginx进行代理设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.创建数据库---- 自带

2.指定使用mysql作为数据存储application.properties

 3.配置集群文件

 

 4.停止nacosbing 复制三分

并修改其中端口号跟名字一一对应 

5.启动nacos默认以集群的模式开启

nginx修改

 微服务注册到nacos集群上  nginx 代理nacos地址为localhost:81

建立模块gateway

导入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

yml文件配置

server:
    port: 7000

spring:
    application:
        name: springcloud-gateway


????
    cloud:
        gateway:
          routes:
                - id: springcloud-product
                    # ?????????   lb://eureka-product?????
                  uri: lb://eureka-product
                    # predicates:???????????????uri? ??
                  predicates:
                      - Path=/product/**
                        - Method=Post
        ??????ip/24???255.255.255???
                      - RemoteAddr=162.168.1.130
                - id: springcloud-order
                  # ?????????
                  uri: lb://springcloud-order
                  # predicates:???????????????uri? ??
                  predicates:
                    - Path=/order/**

#????gateway??????
  cloud:
    gateway:
        discovery:
          locator:
            enabled: true
    #?????????
    nacos:
        server-addr: localhost:81

  anon:
    url:
      - /sso/login
      - /product/getMsg

Anon

@Component
@ConfigurationProperties(prefix = "anon")
public class Anon {
    private List<String> url;

    public List<String> getUrl() {
        return url;
    }

    public void setUrl(List<String> url) {
        this.url = url;
    }
}

LoginFilter

@Component
public class LoginFilter implements GlobalFilter, Ordered {
    @Autowired
    private Anon anon;
    @Override
    //过滤方法 过滤业务
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        ServerHttpResponse response = exchange.getResponse();
        //0.获去请求
        String path = request.getPath().toString();
        //1.判断房前路径是否为放行路径
        if(anon.getUrl().contains(path)){
            return chain.filter(exchange);//放行
        }
        //2.判断是否携带token
        String token = request.getHeaders().getFirst("token");
        if(StringUtils.hasText(token)&&"admin".equals(token)){
            return chain.filter(exchange);//放行
        }
        //3.返回一个json数据。
        //3.1设置状态码
        response.setStatusCode(HttpStatus.UNAUTHORIZED);
        //3.2封装返回数据
        Map<String, Object> map = new HashMap<>();
        map.put("msg", "未登录");
        map.put("code", 4000);
        //3.3作JSON转换
        byte[] bytes = JSON.toJSONString(map).getBytes(StandardCharsets.UTF_8 );
        //3.4调用bufferFactory方法,生成DataBuffer对象
        DataBuffer buffer = response.bufferFactory().wrap(bytes);
        //4.调用Mono中的just方法,返回要写给前端的JSON数据
        return response.writeWith(Mono.just(buffer));
    }


    @Override
    //优先级 返回的值越小优先级越高
    public int getOrder() {
        return 0;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值