gateway网关

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

gateway网关_第1张图片

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

gateway网关_第2张图片

 3.配置集群文件

gateway网关_第3张图片

 gateway网关_第4张图片

 4.停止nacosbing 复制三分

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

gateway网关_第5张图片

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

gateway网关_第6张图片

gateway网关_第7张图片

nginx修改

gateway网关_第8张图片

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

建立模块gateway

导入依赖


    org.springframework.cloud
    spring-cloud-starter-gateway

    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-discovery

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 url;

    public List getUrl() {
        return url;
    }

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

LoginFilter

@Component
public class LoginFilter implements GlobalFilter, Ordered {
    @Autowired
    private Anon anon;
    @Override
    //过滤方法 过滤业务
    public Mono 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 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;
    }
}

你可能感兴趣的:(gateway)