springcloud getway全局过滤器

GlobalFilter全剧过滤器

package com.huahailong.filter;

import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.URI;
import java.util.List;

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.io.buffer.DataBuffer;
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.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange;

import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;
import reactor.core.publisher.Mono;

/***
 * 全局过滤器
 * 
 * @author Administrator
 *
 */
@Component
public class GlobFilter implements GlobalFilter {

	@Override
	public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
		ServerHttpRequest request = exchange.getRequest();
		ServerHttpResponse response = exchange.getResponse();
		MultiValueMap<String, String> queryParams = request.getQueryParams();
		//根据参数key获取参数
		String first = queryParams.getFirst("id");
		URI uri = request.getURI();
		System.out.println(first);
		System.out.println("请求地址:" + uri);
		InetSocketAddress remoteAddress = request.getRemoteAddress();
		InetAddress address = remoteAddress.getAddress();
		System.out.println("转发地址:" + address);
		System.out.println("转发信息:" + JSONUtil.toJsonStr(remoteAddress));
		if (first == null || first.equals("")) {
			response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);
			DataBuffer wrap;
			try {
				wrap = response.bufferFactory().wrap(new String("ID is null").getBytes("utf-8"));
				return response.writeWith(Mono.just(wrap));
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
		}
		return chain.filter(exchange);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud Alibaba 是阿里巴巴开发的一款基于 Spring Cloud 的微服务开发框架。它提供了一系列微服务开发所需的核心组件,如服务注册与发现、配置中心、消息总线、负载均衡、熔断器、数据存储等。而 Spring Cloud Gateway 则是 Spring Cloud 微服务架构的网关,它基于 Spring 5.0,使用了 Reactor 模式实现了非阻塞式的 API 服务路由代理。 下面是 Spring Cloud Alibaba 整合 Spring Cloud Gateway 的步骤: 1. 创建 Spring Boot 项目,并添加 Spring Cloud Alibaba 和 Spring Cloud Gateway 依赖。 2. 编写配置文件,配置 Spring Cloud Alibaba Nacos 作为服务注册中心,并配置 Spring Cloud Gateway 的路由规则。 3. 在启动类上添加 @EnableDiscoveryClient 和 @EnableGateway 注解,启用服务注册和网关。 4. 编写过滤器,对请求进行处理。 5. 启动项目,访问网关地址进行测试。 参考示例代码: pom.xml 文件添加依赖: ```xml <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> </dependencies> ``` application.yml 文件配置: ```yaml server: port: 8080 spring: application: name: gateway cloud: nacos: discovery: server-addr: localhost:8848 gateway: routes: - id: test_route uri: http://localhost:8081 predicates: - Path=/test/** - id: demo_route uri: http://localhost:8082 predicates: - Path=/demo/** ``` 启动类 GatewayApplication.java 文件: ```java @SpringBootApplication @EnableDiscoveryClient @EnableGateway public class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } } ``` 编写过滤器 GlobalFilter.java 文件: ```java @Component public class GlobalFilter implements GatewayFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { // 处理请求 return chain.filter(exchange); } @Override public int getOrder() { return 0; } } ``` 以上就是 Spring Cloud Alibaba 整合 Spring Cloud Gateway 的简单示例,希望可以帮助到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值