You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					
					
						
							141 lines
						
					
					
						
							4.4 KiB
						
					
					
				
			
		
		
	
	
							141 lines
						
					
					
						
							4.4 KiB
						
					
					
				package com.ynxbd.wx.wxfactory;
 | 
						|
 | 
						|
import com.ynxbd.common.bean.User;
 | 
						|
import com.ynxbd.common.config.EhCacheConfig;
 | 
						|
import com.ynxbd.wx.wxfactory.bean.AccessToken;
 | 
						|
import com.ynxbd.wx.wxfactory.bean.JsapiTicket;
 | 
						|
import lombok.extern.slf4j.Slf4j;
 | 
						|
import org.ehcache.Cache;
 | 
						|
 | 
						|
@Slf4j
 | 
						|
public class WxCacheHelper {
 | 
						|
    static {
 | 
						|
        createUserCache();
 | 
						|
        createAccessTokenCache();
 | 
						|
    }
 | 
						|
 | 
						|
    // 缓存
 | 
						|
    private static Cache<String, User> USER_CACHE;
 | 
						|
 | 
						|
    private static Cache<String, AccessToken> ACCESS_TOKEN_CACHE;
 | 
						|
 | 
						|
 | 
						|
    private static Cache<String, JsapiTicket> JSAPI_TICKET_CACHE;
 | 
						|
 | 
						|
    private synchronized static void createUserCache() {
 | 
						|
        if (USER_CACHE == null) {
 | 
						|
            USER_CACHE = EhCacheConfig.createCacheTTL(String.class, User.class, "wx_auth_cache", (5400L)); // 一个半小时
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    public static Cache<String, User> getUserCache() {
 | 
						|
        if (USER_CACHE == null) {
 | 
						|
            createUserCache();
 | 
						|
        }
 | 
						|
        return USER_CACHE;
 | 
						|
    }
 | 
						|
 | 
						|
    public static void removeUser(String openid) {
 | 
						|
        Cache<String, User> cache = getUserCache();
 | 
						|
        if (cache != null) {
 | 
						|
            cache.remove(openid);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public static User getCacheUser(String openid) {
 | 
						|
        if (USER_CACHE == null) {
 | 
						|
            createUserCache();
 | 
						|
        }
 | 
						|
        return USER_CACHE.get(openid);
 | 
						|
    }
 | 
						|
 | 
						|
    public static final String ACCESS_TOKEN_CACHE_NAME = "access_token";
 | 
						|
 | 
						|
 | 
						|
    private synchronized static void createAccessTokenCache() {
 | 
						|
        if (ACCESS_TOKEN_CACHE == null) {
 | 
						|
            ACCESS_TOKEN_CACHE = EhCacheConfig.createCacheTTL(String.class, AccessToken.class, "wx_access_token_cache", (7100L)); // 一个半小时
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public static AccessToken getWxAccessToken() {
 | 
						|
        if (ACCESS_TOKEN_CACHE == null) {
 | 
						|
            createAccessTokenCache();
 | 
						|
        }
 | 
						|
        AccessToken token = new AccessToken();
 | 
						|
 | 
						|
        AccessToken cacheToken = ACCESS_TOKEN_CACHE.get(ACCESS_TOKEN_CACHE_NAME);
 | 
						|
        log.warn("cacheToken={}", cacheToken);
 | 
						|
        if (cacheToken != null) {
 | 
						|
            token.setCreateTime(cacheToken.getCreateTime());
 | 
						|
            token.setAccessToken(cacheToken.getAccessToken());
 | 
						|
            return token;
 | 
						|
        }
 | 
						|
        AccessToken respToken = WxMedicalHelper.getAccessToken(ACCESS_TOKEN_CACHE);
 | 
						|
        if (respToken == null) {
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
 | 
						|
        log.warn("respToken={}", respToken);
 | 
						|
        token.setCreateTime(respToken.getCreateTime());
 | 
						|
        token.setAccessToken(respToken.getAccessToken());
 | 
						|
        ACCESS_TOKEN_CACHE.put(ACCESS_TOKEN_CACHE_NAME, respToken);
 | 
						|
        return token;
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    public static String getAccessToken() {
 | 
						|
        AccessToken accessToken = getWxAccessToken();
 | 
						|
        if (accessToken != null) {
 | 
						|
            return accessToken.getAccessToken();
 | 
						|
        }
 | 
						|
        return null;
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
    public static final String JSAPI_TICKET_CACHE_NAME = "jsapi_ticket";
 | 
						|
 | 
						|
 | 
						|
    private synchronized static void createJsapiTicketCache() {
 | 
						|
        if (JSAPI_TICKET_CACHE == null) {
 | 
						|
            JSAPI_TICKET_CACHE = EhCacheConfig.createCacheTTL(String.class, JsapiTicket.class, "wx_jsapi_ticket_cache", (7100L)); // 一个半小时
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public static JsapiTicket getWxJsapiTicket() {
 | 
						|
        if (JSAPI_TICKET_CACHE == null) {
 | 
						|
            createJsapiTicketCache();
 | 
						|
        }
 | 
						|
        JsapiTicket token = new JsapiTicket();
 | 
						|
 | 
						|
        JsapiTicket cacheTicket = JSAPI_TICKET_CACHE.get(JSAPI_TICKET_CACHE_NAME);
 | 
						|
        log.warn("cache_jsapi_ticket={}", cacheTicket);
 | 
						|
        if (cacheTicket != null) {
 | 
						|
            token.setCreateTime(cacheTicket.getCreateTime());
 | 
						|
            token.setJsapiTicket(cacheTicket.getJsapiTicket());
 | 
						|
            return token;
 | 
						|
        }
 | 
						|
        JsapiTicket respToken = WxMedicalHelper.getJsapiTicket(JSAPI_TICKET_CACHE);
 | 
						|
        if (respToken == null) {
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
 | 
						|
        log.warn("resp_jsapi_ticket={}", respToken);
 | 
						|
        token.setCreateTime(respToken.getCreateTime());
 | 
						|
        token.setJsapiTicket(respToken.getJsapiTicket());
 | 
						|
        JSAPI_TICKET_CACHE.put(JSAPI_TICKET_CACHE_NAME, respToken);
 | 
						|
        return token;
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    public static String getJsapiTicket() {
 | 
						|
        JsapiTicket jsapiTicket = getWxJsapiTicket();
 | 
						|
        if (jsapiTicket != null) {
 | 
						|
            return jsapiTicket.getJsapiTicket();
 | 
						|
        }
 | 
						|
        return null;
 | 
						|
    }
 | 
						|
 | 
						|
}
 | 
						|
 |