|
|
@@ -0,0 +1,46 @@
|
|
|
+package anyi.space.memberConsumer.filter;
|
|
|
+
|
|
|
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
|
|
|
+import org.springframework.cloud.gateway.filter.GlobalFilter;
|
|
|
+import org.springframework.core.Ordered;
|
|
|
+import org.springframework.http.HttpStatus;
|
|
|
+import org.springframework.http.server.reactive.ServerHttpRequest;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.util.MultiValueMap;
|
|
|
+import org.springframework.web.server.ServerWebExchange;
|
|
|
+import reactor.core.publisher.Mono;
|
|
|
+
|
|
|
+
|
|
|
+/**
|
|
|
+ * @ProjectName: distributedSystemLearn
|
|
|
+ * @FileName: MyGlobalFilter
|
|
|
+ * @Author: 杨逸
|
|
|
+ * @Data:2025/9/12 17:27
|
|
|
+ * @Description: 自定义全局过滤器
|
|
|
+ * 实现鉴权场景,当用户名和密码满足要求时才能通过网关
|
|
|
+ */
|
|
|
+@Component
|
|
|
+public class MyGlobalFilter implements GlobalFilter, Ordered {
|
|
|
+ @Override
|
|
|
+ public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
|
|
+ //获取请求头中的用户名和密码
|
|
|
+ ServerHttpRequest request = exchange.getRequest();
|
|
|
+ MultiValueMap<String, String> queryParams = request.getQueryParams();
|
|
|
+ String username = queryParams.getFirst("username");
|
|
|
+ String password = queryParams.getFirst("password");
|
|
|
+ //判断用户名和密码是否正确
|
|
|
+ if (!("yangyi".equals(username) && "password".equals(password))){
|
|
|
+ System.out.println("鉴权失败");
|
|
|
+ exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);
|
|
|
+ //没有通过校验,结束请求
|
|
|
+ return exchange.getResponse().setComplete();
|
|
|
+ }
|
|
|
+ return chain.filter(exchange);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int getOrder() {
|
|
|
+ //这里指定过滤器的优先级,数字越小,优先级越高
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+}
|