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