forked from kidgrow-microservices-platform

zhaoxiaohao
2021-03-11 0c9ff5198c54ec5d2f3bbb8c5a406d270df1e188
优化token验证的流程
3 files modified
35 ■■■■ changed files
kidgrow-uaa/kidgrow-uaa-biz/src/main/java/com/kidgrow/oauth2/service/ITokensService.java 5 ●●●●● patch | view | raw | blame | history
kidgrow-uaa/kidgrow-uaa-biz/src/main/java/com/kidgrow/oauth2/service/impl/RedisTokensServiceImpl.java 28 ●●●● patch | view | raw | blame | history
kidgrow-uaa/kidgrow-uaa-server/src/main/java/com/kidgrow/oauth2/controller/TokensController.java 2 ●●● patch | view | raw | blame | history
kidgrow-uaa/kidgrow-uaa-biz/src/main/java/com/kidgrow/oauth2/service/ITokensService.java
@@ -22,5 +22,10 @@
     */
    PageResult<TokenVo> listTokens(Map<String, Object> params, String clientId);
    /**
     * 获取用户是否登录;
     * @param map
     * @return
     */
    ResultBody getBeforLogin(Map<String, Object> map);
}
kidgrow-uaa/kidgrow-uaa-biz/src/main/java/com/kidgrow/oauth2/service/impl/RedisTokensServiceImpl.java
@@ -6,21 +6,25 @@
import com.kidgrow.common.model.PageResult;
import com.kidgrow.common.model.ResultBody;
import com.kidgrow.common.utils.StringUtils;
import com.kidgrow.redis.template.RedisRepository;
import com.kidgrow.oauth2.model.TokenVo;
import com.kidgrow.oauth2.service.ITokensService;
import com.kidgrow.redis.template.RedisRepository;
import com.kidgrow.redis.util.RedisUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.security.oauth2.provider.OAuth2Request;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
@@ -37,6 +41,8 @@
    private RedisRepository redisRepository;
    @Autowired
    private RedisUtils redisUtils;
    @Autowired
    private TokenStore tokenStore;
    @Override
    public PageResult<TokenVo> listTokens(Map<String, Object> params, String clientId) {
@@ -87,6 +93,11 @@
        return result;
    }
    /**
     * 获取用户是否登录;
     * @param map
     * @return
     */
    @Override
    public ResultBody getBeforLogin(Map<String, Object> map) {
        String name = MapUtils.getString(map, "name");
@@ -97,13 +108,16 @@
        if (StringUtils.isBlank(webApp)) {
            return ResultBody.failed("请输入应用id");
        }
        List<Object> objectList = redisUtils.lGet(SecurityConstants.REDIS_UNAME_TO_ACCESS+webApp+":"+name,0,0
        );
        if(objectList!=null){
            if (objectList.size()>0) {
                return ResultBody.ok().data(false);
            }else {
        //获取token
        Collection<OAuth2AccessToken> tokensByClientIdAndUserName = this.tokenStore.findTokensByClientIdAndUserName(webApp, name);
        List<OAuth2AccessToken> collect = tokensByClientIdAndUserName.stream().collect(Collectors.toList());
//        验证token
        if(collect!=null){
            OAuth2AccessToken oAuth2AccessToken = collect.get(collect.size() - 1);
            if(oAuth2AccessToken.isExpired()){
                return ResultBody.ok().data(true);
            }else {
                return ResultBody.ok().data(false);
            }
        }else {
            return ResultBody.ok().data(true);
kidgrow-uaa/kidgrow-uaa-server/src/main/java/com/kidgrow/oauth2/controller/TokensController.java
@@ -32,7 +32,7 @@
        return tokensService.listTokens(params, tenantId);
    }
    /**
     * 获取用户是否登录
     * 获取用户是否登录;
     * @param map
     * @return
     */