Browse Source

feat:自定义全局过滤器,模拟鉴权的场景

yang yi 1 year ago
parent
commit
7a60ac264c

+ 46 - 0
member-service-consumer/src/main/java/anyi/space/memberConsumer/filter/MyGlobalFilter.java

@@ -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;
+    }
+}