From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master

---
 jnpf-gateway/src/main/java/jnpf/filter/AuthFilter.java |  102 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 102 insertions(+), 0 deletions(-)

diff --git a/jnpf-gateway/src/main/java/jnpf/filter/AuthFilter.java b/jnpf-gateway/src/main/java/jnpf/filter/AuthFilter.java
new file mode 100644
index 0000000..3c7a72d
--- /dev/null
+++ b/jnpf-gateway/src/main/java/jnpf/filter/AuthFilter.java
@@ -0,0 +1,102 @@
+package jnpf.filter;
+
+import cn.dev33.satoken.SaManager;
+import cn.dev33.satoken.context.SaHolder;
+import cn.dev33.satoken.exception.NotLoginException;
+import cn.dev33.satoken.filter.SaFilterAuthStrategy;
+import cn.dev33.satoken.reactor.filter.SaReactorFilter;
+import cn.dev33.satoken.router.SaRouter;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.util.SaResult;
+import jnpf.base.ActionResultCode;
+import jnpf.constant.MsgCode;
+import jnpf.consts.AuthConsts;
+import jnpf.properties.GatewayWhite;
+import jnpf.util.GatewayUtil;
+import jnpf.util.ReactorUtil;
+import jnpf.util.UserProvider;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * 缃戝叧楠岃瘉token
+ *
+ * @author JNPF寮�鍙戝钩鍙扮粍
+ * @version V3.1.0
+ * @copyright 寮曡繄淇℃伅鎶�鏈湁闄愬叕鍙革紙https://www.jnpfsoft.com锛�
+ * @date 2021-03-24
+ */
+@Slf4j
+@Configuration
+@Component
+@RequiredArgsConstructor
+public class AuthFilter {
+
+    private final SaFilterAuthStrategy defaultBeforeAuthStrategy;
+
+
+    // 娉ㄥ唽 Sa-Token鍏ㄥ眬杩囨护鍣�
+    @Bean
+    public SaReactorFilter getSaReactorFilter(GatewayWhite gatewayWhite) {
+        return new SaReactorFilter()
+            // 鎷︽埅鍦板潃
+            .addInclude("/**")
+            .setExcludeList(gatewayWhite.getExcludeUrl())
+            // 閴存潈鏂规硶锛氭瘡娆¤闂繘鍏�
+            .setAuth(obj -> {
+                if(log.isInfoEnabled()){
+                    log.info("璇锋眰璺緞: {}", SaHolder.getRequest().getRequestPath());
+                }
+                //鎷︽埅璺緞
+                SaRouter.match(gatewayWhite.getBlockUrl()).match(o -> {
+                    //绂佹璁块棶URL 鎺掗櫎鐧藉悕鍗�
+                    String ip = getIpAddr();
+                    for (String o1 : gatewayWhite.getWhiteIp()) {
+                        if(ip.startsWith(o1)){
+                            return false;
+                        }
+                    }
+                    log.info("闈炵櫧鍚嶅崟IP璁块棶闄愬埗鎺ュ彛锛歿}, {}", SaHolder.getRequest().getRequestPath(), ip);
+                    return true;
+                }).back(MsgCode.AD101.get());
+                //娴嬭瘯涓嶉獙璇� 閴存潈鏈嶅姟閲嶅惎娴嬭瘯妯″紡涓嶆竻闄oken灏卞浜�
+                //SaRouter.match((r)->"true".equals(configValueUtil.getTestVersion())).stop();
+                //鐧藉悕鍗曚笉鎷︽埅
+                SaRouter.match(gatewayWhite.getWhiteUrl()).stop();
+                //鍐呴儴璇锋眰涓嶆嫤鎴�
+                SaRouter.match(t->{
+                    String innerToken = SaHolder.getRequest().getHeader(AuthConsts.INNER_TOKEN_KEY);
+                    return UserProvider.isValidInnerToken(innerToken);
+                }).stop();
+                // 鐧诲綍鏍¢獙 -- 鏍¢獙澶氱鎴风鐞嗘ā鍧桾OKEN
+                SaRouter.match("/api/tenant/**", r -> {
+                    SaManager.getStpLogic(AuthConsts.ACCOUNT_TYPE_TENANT).checkLogin();
+                    GatewayUtil.renewToken(StpUtil.getTokenValue());
+                }).stop();
+                // 鐧诲綍鏍¢獙 -- 鎷︽埅鎵�鏈夎矾鐢�
+                SaRouter.match("/**", r -> {
+                    StpUtil.checkLogin();
+                }).stop();
+            }).setError(e -> {
+                SaHolder.getResponse().addHeader("Content-Type","application/json; charset=utf-8");
+                if(e instanceof NotLoginException){
+                    return SaResult.error(ActionResultCode.SESSIONOVERDUE.getMessage()).setCode(ActionResultCode.SESSIONOVERDUE.getCode());
+                }
+                log.error(e.getMessage(), e);
+                return SaResult.error(MsgCode.AD102.get()).setCode(ActionResultCode.EXCEPTION.getCode());
+            })
+            // 鍓嶇疆鍑芥暟锛氬湪姣忔璁よ瘉鍑芥暟涔嬪墠鎵ц
+            .setBeforeAuth(defaultBeforeAuthStrategy);
+    }
+
+
+    public static String getIpAddr() {
+        return ReactorUtil.getIpAddr(SaHolder.getRequest());
+    }
+
+
+}

--
Gitblit v1.8.0