import cn.hutool.extra.spring.SpringUtil;
import cn.hutool.http.HttpUtil;
import cn.RedisUtil;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j; /**
* <p>
* 获取微信的token工具类
* </p>
*
* @author wss
* @date 2021-06-07
* */
@Slf4j
public class AccessTokenUtil { //获取access_token的接口地址
public static String accessTokenUrl;
//应用ID
public static String appId;
//开发者密钥
public static String secret; public static RedisUtil redisUtil= SpringUtil.getBean("redisUtil"); /**
* 获取token
* */
public static String getToken () {
//先查看Redis当中有没有,如果没有,就请求微信的接口,同时存储到Redis,同时设置过期时间
String token = (String) redisUtil.get("wechat_token");
if (token == null) {
//Redis没有,请求微信的接口
try {
//构建url
String url = accessTokenUrl + "?grant_type=client_credential&appid=" + appId + "&secret=" + secret;
//3、请求接口,拿到响应信息
String response = HttpUtil.get(url);
//处理返回的结果
//拿到响应回来的token
token = JSON.parseObject(response).getString("access_token");
//存放到Redis
redisUtil.set("wechat_token" , token , 7100); }catch (Exception e) {
log.error("获取token时异常:" + e);
} }
return token;
}
}


import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; /**
* @Auther: wss
* @Date: 2020/5/26 10:32
* @Description:
*/
@Service
public class RedisUtil {
@Autowired
private RedisTemplate<String, Object> redisTemplate; // =============================common============================
/**
* 指定缓存失效时间
* @param key 键
* @param time 时间(秒)
* @return
*/
public boolean expire(String key, long time) {
try {
if (time > 0) {
redisTemplate.expire(key, time, TimeUnit.SECONDS);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
} // ============================String=============================
/**
* 普通缓存获取
* @param key 键
* @return 值
*/
public Object get(String key) {
return key == null ? null : redisTemplate.opsForValue().get(key);
} /**
* 普通缓存放入
* @param key 键
* @param value 值
* @return true成功 false失败
*/
public boolean set(String key, Object value) {
try {
redisTemplate.opsForValue().set(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
} /**
* 普通缓存放入并设置时间
* @param key 键
* @param value 值
* @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
* @return true成功 false 失败
*/
public boolean set(String key, Object value, long time) {
try {
if (time > 0) {
redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
} else {
set(key, value);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
} /**
* 删除缓存
* @param key 可以传一个值 或多个
*/
@SuppressWarnings("unchecked")
public void del(String... key) {
if (key != null && key.length > 0) {
if (key.length == 1) {
redisTemplate.delete(key[0]);
} else {
redisTemplate.delete(CollectionUtils.arrayToList(key));
}
}
} /**
* 删除缓存
* @param keys 可以传一个值 或多个
*/
@SuppressWarnings("unchecked")
public void del(Collection keys) {
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(keys)) {
redisTemplate.delete(keys);
}
} /**
* 前缀获取所有
* @param prefix
* @return
*/
public Map<String, Object> getAllKeyValues(String prefix) {
Collection<String> allKeys = this.getAllKeys(prefix);
HashMap<String, Object> results = CollectionUtil.newHashMap();
for (String key : allKeys) {
results.put(key, this.get(key));
}
return results;
} /**
* 前缀获取所有key
* @param prefix
* @return
*/
public Collection<String> getAllKeys(String prefix) {
Set<String> keys = redisTemplate.keys(prefix + "*");
if (keys != null) {
// 去掉缓存key的common prefix前缀
return keys.stream().map(key -> StrUtil.removePrefix(key, prefix)).collect(Collectors.toSet());
} else {
return CollectionUtil.newHashSet();
}
}
}

获取微信的token工具类的更多相关文章

  1. 微信https请求工具类

    工作中用到的微信https请求工具类. package com.gxgrh.wechat.tools; import com.gxgrh.wechat.wechatapi.service.System ...

  2. java 微信开发的工具类WeChatUtils

    import com.alibaba.fastjson.JSONObject;import com.bhudy.entity.BhudyPlugin;import com.bhudy.service. ...

  3. java 微信开发 常用工具类(xml传输和解析 json转换对象)

    与微信通信常用工具(xml传输和解析) package com.lownsun.wechatOauth.utl; import java.io.IOException; import java.io. ...

  4. Java判断访问设备为手机、微信、PC工具类

    package com.lwj.util; import javax.servlet.http.HttpServletRequest; /** * 判断访问设备为PC或者手机--工具类 * * @de ...

  5. 微信小程序工具类

    wechat-common-sdk ? 场景:目前工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想 ...

  6. 获取request参数的工具类

    package cn.edu.hactcm.util; import java.io.File; import java.io.FileOutputStream; import java.io.IOE ...

  7. ASP.NET WEBAPI 获取微信Access token

    /// <summary> /// 获取Access token /// </summary> /// <param name="appid"> ...

  8. java获取客户端ip地址工具类

    public class IpUtils { private static final String[] HEADERS = { "X-Forwarded-For", " ...

  9. 获取请求的ip工具类

    package com.example.util; import javax.servlet.http.HttpServletRequest; /** * get remote msg * 获取访问的 ...

  10. 从session中获取当前用户的工具类

    package cn.crmx.crm.util; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Ht ...

随机推荐

  1. [Python3] 初识py, 一个简单练手的小玩意. 快递查询

    有图有真相 脚本代码 最近刚入门py, 准备写点小玩意练练手. 于是决定拿快递100开刀. 因为它的api很简单. # 快递100 API # 作者: 剑齿虎 # 邮箱: yuxiaobo64@gma ...

  2. Linux虚拟机安装及下载

    centos 7操作系统下载及安装步骤 (仅供参考) 下载: 1.打开如下网站:先下载镜像文件 ping:https://www.centos.org/download/ 2.进入到如下界面 3.然后 ...

  3. Markdown初识

    1.标题 一级标题 ctrl+1......六级标题 ctrl+6 2.字体 加粗 ctrl+B 斜体 ctrl+I 下划线 ctrl+ U 3.引用 大于号加任意键 4.分割线 "---& ...

  4. SpringBoot使用@Async注解8大坑点

    前言 SpringBoot中,@Async注解可以实现异步线程调用,用法简单,体验舒适. 但是你一定碰到过异步调用不生效的情况,今天,我就列出90%的人都可能会遇到的8大坑点. 正文 1.未启用异步支 ...

  5. nginx URLRewrite基础配置

    环境准备: 主机 ip control01 192.168.29.128 nginx01 192.168.29.101 在两台机器上分别部署nginx control01主机nginx配置的内容如下: ...

  6. 有人说SaToken吃相难看,你怎么看。

    前言 今天摸鱼逛知乎,偶然看到了一个回答,8月份的,是关于SaToken的,一时好奇就点了进去. 好家伙,因为一个star的问题,提问的人抱怨了许多,我有些意外,就仔细看了下面的评论,想知道一部分人的 ...

  7. ORACEL12C ORA-01033:ORACLE 正在初始化或关闭

    问题:客户端报ORA-01033 原因:oracle12C CDB启动,但是可拔插的PDB实例未启动 解决办法: sqlplus / as sysdba--系统管理员登录 alter session ...

  8. Oracle存储函数写法及调用

    1.右键导航创建函数界面 2.返回值FunctionResult可自定义,当函数有输出函数时可不传数据,但需要设置返回(当提示未限定返回长度时,如代码示例设置255长度皆可): -------使用函数 ...

  9. 维修道路(repair)

    维修道路(repair) 时间限制: 1 Sec  内存限制: 128 MB 题目描述 由于在十多年前道路改建时的突出贡献, Bob 被任命为维修道路的承包商, 他可以任意 选择两条路径去修理. Bo ...

  10. Full Tank 题解

    Full Tank 题目大意 给定一张 \(n\) 个点,\(m\) 条边的连通无向图,在每个点有一个加油站,油价为该点的点权,每条边的油耗为该边的边权.现给出若干询问,问一辆油箱容量为 \(c\) ...