全局缓存accessToken

package cn.itcast.core.util.weixin;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class Singleton {

//缓存accessToken 的Map,map中包含 一个accessToken 和 缓存的时间戳
    private Map<String, String> map = new HashMap<String,String>();

    private Singleton() {
        
    }

    private static Singleton single = null;

    // 静态工厂方法
    public static Singleton getInstance() {
        if (single == null) {
            single = new Singleton();
        }
        return single;
    }


    public Map<String, String> getMap() {
        return map;
    }


    public void setMap(Map<String, String> map) {
        this.map = map;
    }


    public static Singleton getSingle() {
        return single;
    }

    public static void setSingle(Singleton single) {
        Singleton.single = single;
    }
    
    /**
     * 获取 accessToken Jsapi_ticket 已加入缓存机制
     * @param appid
     * @param appsecret
     * @return
     */
    public Map<String,Object> getAccessTokenAndJsapiTicket() {
        Map<String,Object> result = new HashMap<String,Object>();
        Singleton singleton = Singleton.getInstance();
        Map<String, String> map = singleton.getMap();
        String time = map.get("time");//从缓存中拿数据
        String accessToken = map.get("access_token");//从缓存中拿数据
        String jsapiticket = map.get("jsapiticket");//从缓存中拿数据
        Long nowDate = new Date().getTime();
        //这里设置过期时间 3000*1000就好了
        if (accessToken != null && time != null && nowDate - Long.parseLong(time) < 3000 * 1000) {
            System.out.println("-----从缓存读取access_token:"+accessToken);
            //从缓存中拿数据为返回结果赋值
            result.put("access_token", accessToken);
            result.put("jsapiticket", jsapiticket);
        } else {
       
           //实际中这里要改为你自己调用微信接口去获取accessToken和jsapiticket
        accessToken = GZopenId.getAtoken();
        jsapiticket = GZopenId.getJSApiTicket(accessToken);
            //将信息放置缓存中
            map.put("time", nowDate + "");
            map.put("access_token", String.valueOf(accessToken));
            map.put("jsapiticket", String.valueOf(jsapiticket));
            //为返回结果赋值
            result.put("access_token", accessToken);
            result.put("jsapiticket", jsapiticket);
            }
        return result;
    }

}

//最后获取获取jsapiTicket
Map<String, Object> accessTokenAndJsapiTicket = Singleton.getInstance().getAccessTokenAndJsapiTicket();
String jsapi_ticket = (String) accessTokenAndJsapiTicket.get("jsapiticket");
Map<String, String> sign = GZopenId.getSign(pd.get("url").toString(), jsapi_ticket);
map.put("sign", sign);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值