Oauth2 accessToken访问令牌续期 不生成新accessToken

//accessToken访问令牌 续期  用户每进行一次业务操作,访问令牌过期时间往后延续20分钟

//accessToken从Authorization请求头中获取 
OAuth2AccessToken oAuth2AccessToken = tokenServices.readAccessToken(accessToken);
//根据oAuth2AccessToken 从redis中 得到包含客户端信息和 用户信息的OAuth2Authenticationw认证对象
        OAuth2Authentication result= tokenServices.loadAuthentication(oAuth2AccessToken.getValue());

//从数据库oauth_client_details表中获取客户端的访问令牌有效时间,如果没有就用自定义的20分钟
        Integer validity=getAccessTokenValiditySeconds(result.getOAuth2Request().getClientId());
        //不能使用这个getExpiresIn() 不是原始秒数,要重新生成System.currentTimeMillis() + (validity * 1000L)
        //oAuth2AccessToken.getExpiresIn()
        ((DefaultOAuth2AccessToken)oAuth2AccessToken).setExpiration(new Date(System.currentTimeMillis() + (validity * 1000L)));
        log.info("oAuth2AccessToken续期结束");
        tokenStore.storeAccessToken(oAuth2AccessToken,result);
        log.info("redis 保存oAuth2AccessToken 结束");

 

//从数据库oauth_client_details表中获取客户端的访问令牌有效时间,如果没有就用自定义的20分钟

private int getAccessTokenValiditySeconds(String clientId) {
    if (clientId != null) {
        ClientDetails client = myClientDetailsService.loadClientByClientId(clientId);
        Integer validity = client.getAccessTokenValiditySeconds();
        if (validity != null) {
            log.info("使用客户端自己的 AccessTokenExp");
            return validity;
        }
    }
    log.info("使用自定义的 myProps.getAccessTokenExp");
    // default 12 hours.
    //int accessTokenValiditySeconds = 60 * 60 * 12;
    return Integer.parseInt(myProps.getAccessTokenExp());
}

发布了4 篇原创文章 · 获赞 1 · 访问量 122
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览