ApiConfigKit.java
3.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package com.jfinal.weixin.sdk.api;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import com.jfinal.kit.StrKit;
import com.jfinal.log.Log;
import com.jfinal.weixin.sdk.cache.DefaultAccessTokenCache;
import com.jfinal.weixin.sdk.cache.IAccessTokenCache;
/**
* 将 ApiConfig 绑定到 ThreadLocal 的工具类,以方便在当前线程的各个地方获取 ApiConfig 对象:
* 1:如果控制器继承自 MsgController 该过程是自动的,详细可查看 MsgInterceptor 与之的配合
* 2:如果控制器继承自 ApiController 该过程是自动的,详细可查看 ApiInterceptor 与之的配合
* 3:如果控制器没有继承自 MsgController、ApiController,则需要先手动调用
* ApiConfigKit.setThreadLocalAppId(appId) 来绑定 appId 到线程之上
*/
public class ApiConfigKit {
private static final Log log = Log.getLog(ApiConfigKit.class);
private static final ThreadLocal<String> TL = new ThreadLocal<String>();
private static final Map<String, ApiConfig> CFG_MAP = new ConcurrentHashMap<String, ApiConfig>();
private static final String DEFAULT_CFG_KEY = "_default_cfg_key_";
// 开发模式将输出消息交互 xml 到控制台
private static boolean devMode = false;
public static void setDevMode(boolean devMode) {
ApiConfigKit.devMode = devMode;
}
public static boolean isDevMode() {
return devMode;
}
/**
* 添加公众号配置,每个appId只需添加一次,相同appId将被覆盖。
* 第一个添加的将作为默认公众号配置
* @param apiConfig 公众号配置
* @return ApiConfig 公众号配置
*/
public static ApiConfig putApiConfig(ApiConfig apiConfig) {
if (CFG_MAP.size() == 0) {
CFG_MAP.put(DEFAULT_CFG_KEY, apiConfig);
}
return CFG_MAP.put(apiConfig.getAppId(), apiConfig);
}
public static ApiConfig removeApiConfig(ApiConfig apiConfig) {
return removeApiConfig(apiConfig.getAppId());
}
public static ApiConfig removeApiConfig(String appId) {
return CFG_MAP.remove(appId);
}
public static void setThreadLocalAppId(String appId) {
if (StrKit.isBlank(appId)) {
appId = CFG_MAP.get(DEFAULT_CFG_KEY).getAppId();
}
TL.set(appId);
}
public static void removeThreadLocalAppId() {
TL.remove();
}
public static String getAppId() {
String appId = TL.get();
if (StrKit.isBlank(appId)) {
appId = CFG_MAP.get(DEFAULT_CFG_KEY).getAppId();
}
return appId;
}
public static ApiConfig getApiConfig() {
String appId = getAppId();
return getApiConfig(appId);
}
public static ApiConfig getApiConfig(String appId) {
log.debug("appId: " + appId);
ApiConfig cfg = CFG_MAP.get(appId);
if (cfg == null)
throw new IllegalStateException("需事先调用 ApiConfigKit.putApiConfig(apiConfig) 将 appId对应的 ApiConfig 对象存入," +
"如JFinalConfig.afterJFinalStart()中调用, 才可以使用 ApiConfigKit.getApiConfig() 系列方法");
return cfg;
}
static IAccessTokenCache accessTokenCache = new DefaultAccessTokenCache();
public static void setAccessTokenCache(IAccessTokenCache accessTokenCache) {
ApiConfigKit.accessTokenCache = accessTokenCache;
}
public static IAccessTokenCache getAccessTokenCache() {
return ApiConfigKit.accessTokenCache;
}
}