栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Maven父子项目Spring-Cloud(GateWay组件加全局过滤器用法)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Maven父子项目Spring-Cloud(GateWay组件加全局过滤器用法)

一、简介

GateWay:springcloud提供请求过滤转发、负载均衡,的组件。

如果Consumer是集群状态默认进行负载均衡。

可以对请求进行过滤。

二、依赖 1、父项目 pom.xml

        8
        8
        1.8
        
        2.3.2.RELEASE
        
        Hoxton.SR9
        
        2.2.6.RELEASE
    
    
    pom
​
    
        
            
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot.version}
                pom
                import
            
            
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                ${spring-cloud-alibaba.version}
                pom
                import
            
        
    

2、GateWay网关项目 pom.xml文件

        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            2.2.6.RELEASE
        
        
        
            org.springframework.cloud
            spring-cloud-starter-gateway
        
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-hystrix
        

三、配置文件
spring:
    cloud:
        gateway:
            routes: #网关路由配置. 每一组路由包括: id(唯一标识), uri(转发目标服务器路径), predicates(断言,匹配方式), filters(过滤器)
                - id: user-consumer
#               uri: http://localhost:8180 #指定ip和端口转发
                uri: lb://user-consumer #指定服务转发后面的是注册中心的名字
                predicates:
                - Path=/user
@SpringBootApplication
@EnableDiscoveryClient
// GateWay和熔断共用一个注解。所以需要添加该注解
@EnableCircuitBreaker
public class Gatewayapplication {
    public static void main(String[] args) {
        SpringApplication.run(Gatewayapplication.class,args);
    }
}

五、通过网关项目访问Consumer

比如:上面配置文件写的路径这样就可以把我们的请求转发到对应的服务器上了。

http://localhost:8080/user-consumer/hello

http://localhost:8080/user-consumer/order

......

六、自定义全局过滤器
  1. 为过滤器类实现接口 GlobalFilter,Ordered

  2. 添加@Component注解

  3. getOrder()方法的值越小越先执行

1、完整的内容
@Component
public class orderfilter implements GlobalFilter, Ordered {
    @Override
    public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        ServerHttpResponse response = exchange.getResponse();
        //执行目标业务
        Mono filter = chain.filter(exchange);
        //目标业务执行之后的操作
        return filter;
    }
​
    @Override
    public int getOrder() {
        return 0;
    }
}
2、直接返回json数据写法
@Component
public class orderfilter implements GlobalFilter, Ordered {
    @Override
    public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        ServerHttpResponse response = exchange.getResponse();
        //执行目标业务
        //不想执行可以重定向走
        try {
            JSONObject message = new JSONObject();
            message.put("status",-1);
            message.put("data","鉴定失败");
            byte[] bits = message.toJSONString().getBytes(StandardCharsets.UTF_8);
            DataBuffer buffer = response.bufferFactory().wrap(bits);
            response.setStatusCode(HttpStatus.UNAUTHORIZED);
            response.getHeaders().add("Content-Type","text/plain;charset=UTF-8");
            return response.writeWith(Mono.just(buffer));
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return chain.filter(exchange);
    }
​
    @Override
    public int getOrder() {
        return 0;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/933514.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号