Spring Boot中微信全局token的缓存实现

为什么要缓存token?

这里的token指的是微信JSAPI中基础支持的ACCESS_TOKEN,并非网页授权ACCESS_TOKEN。网页授权Token每天的调用次数没有限制,不需要缓存。

接口 每日限额
获取access_token 2000
自定义菜单创建 1000
自定义菜单查询 10000
获取用户基本信息 5000000
获取网页授权access_token
刷新网页授权access_token
网页授权获取用户信息

从上面的表格我们可以看到,微信基础支持的token每天调用频次为2000次。而token的有效时间为7200s,当实现了token的全局缓存后,理论每天只需要调用12次。相反,2000次即使仅供微信分享回调,在有一定用户基础的项目中完全满足不了。

缓存方案

  1. 项目启动时开启一个定时器,每7180s执行一次Http请求,从微信获取最新的access_token并将redis中旧的access_token替换掉。
  2. 代码中有需要使用access_token时,直接从缓存中读取。

Spring Boot使用定时器

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.sql.SQLException;

import javax.annotation.Resource;

import org.apache.log4j.Logger;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import com.bjb.dao.impl.RedisTokenHelper;

import net.sf.json.JSONObject;

/**
 * 全局定时器
 * @author qiqj
 *
 */
@Component
public class Scheduler {

    private final Logger logger = Logger.getRootLogger();

    @Resource
    private RedisTokenHelper redisTokenHelper;
    /**
     * 定时获取access_token
     * @throws SQLException 
     */
    @Scheduled(fixedDelay=7180000)
    public void getAccessToken() throws SQLException{
        logger.info("==============开始获取access_token===============");
        String access_token = null;
        String grant_type = "client_credential";
        String AppId= WxPropertiseUtil.getProperty("appid");
        String secret= WxPropertiseUtil.getProperty("secret");
        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type="+grant_type+"&appid="+AppId+"&secret="+secret;  

        try {  
            URL urlGet = new URL(url);  
            HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();  
            http.setRequestMethod("GET"); // 必须是get方式请求  
            http.setRequestProperty("Content-Type"
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
实现微信小程序登录,需要进行以下步骤: 1. 微信小程序登录流程 微信小程序登录流程大致如下: - 用户在小程序点击登录按钮 - 小程序调用 `wx.login` 接口,获取 `code` - 小程序将 `code` 发送到开发者服务器 - 开发者服务器使用 `code` 调用微信接口,获取 `openid` 和 `session_key` - 开发者服务器使用 `openid` 和 `session_key` 生成自己的登录态,返回给小程序 2. 创建微信小程序 首先需要在微信公众平台上创建一个小程序,获取小程序的 `appid` 和 `appsecret`。 3. 小程序登录代码实现 在小程序,可以使用 `wx.login` 接口获取用户登录凭证 `code`。 在后端,可以使用 Spring Boot 框架,结合 Spring Security 实现登录功能。具体步骤如下: - 创建一个自定义的 `WeChatAuthenticationToken` 类,用于封装用户登录信息。 - 创建一个自定义的 `WeChatAuthenticationProvider` 类,用于处理用户登录请求,验证登录信息。 - 创建一个自定义的 `WeChatAuthenticationFilter` 类,用于处理用户登录请求,生成 `WeChatAuthenticationToken` 对象,并调用 `WeChatAuthenticationProvider` 进行验证。 - 创建一个自定义的 `WeChatAuthenticationSuccessHandler` 类,用于处理登录成功后的逻辑。 - 在 Spring Security 配置,将 `WeChatAuthenticationFilter` 配置到 `UsernamePasswordAuthenticationFilter` 之前,以拦截微信小程序登录请求。 具体代码实现可以参考以下博客:https://www.cnblogs.com/tong-yuan/p/11174698.html 注意,为了保证用户信息的安全,需要对返回给小程序的登录态进行加密处理。可以使用 JWT(JSON Web Token)进行加密,保证用户信息的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值