(十三)企业级java b2bc商城系统开源源码二次开发-SSO单点登陆之OAuth2.0 根据token获取用户信息(4)

上一篇我根据框架中OAuth2.0的使用总结,画了SSO单点登陆之OAuth2.0 登出流程,今天咱们看一下根据用户token获取yoghurt信息的流程:架构

50794a46-b86e-3062-8768-2b20627aec29.png

/** 
 * 根据token获取用户信息 
 * @param accessToken 
 * @return 
 * @throws Exception 
 */  
@RequestMapping(value = "/user/token/{accesstoken}", method = RequestMethod.GET)  
public ResponseVO getUserByToken(@PathVariable(value = "accessToken", required = true) String accessToken,@RequestHeader(value = "userId", required = true) Long userId) throws Exception {  
    if(StringUtils.isEmpty(accessToken)){  
        return UserResponseCode.buildEnumResponseVO(UserResponseCode.RESPONSE_CODE_REQ_CANNOT_EMPTY, null);  
    }  
      
    OauthAccessToken oauthAccessToken = userMgrService.getOauthAccessToken(accessToken);  
    if(null == oauthAccessToken){  
        return UserResponseCode.buildEnumResponseVO(UserResponseCode.RESPONSE_CODE_OAUTH_ACCESSTOKEN_EMPTY, null);  
    }  
      
    String userName = oauthAccessToken.getUserName();  
    if (StringUtils.isEmpty(userName)) {  
        return UserResponseCode.buildEnumResponseVO(UserResponseCode.RESPONSE_CODE_OAUTH_ACCESSTOKEN_EMPTY, null);  
    }  
      
    return this.getUser(userName);  
}  
  
       @RequestMapping(path = "/user/get/{userName}", method = RequestMethod.GET)  
public ResponseVO getUser(@PathVariable(value = "userName") String userName) {  
    Map<String, Object> returnData = null;  
    try {  
        User user = userMgrService.getUserByName(userName);  
        if (null != user) {  
            returnData = new HashMap<String, Object>();  
            returnData.put("user", user);  
            return UserResponseCode.buildEnumResponseVO(UserResponseCode.RESPONSE_CODE_SUCCESS, returnData);  
        }  
        return UserResponseCode.buildEnumResponseVO(UserResponseCode.RESPONSE_CODE_SYSTEM_ERROR, null);  
    } catch (Exception e) {  
        return UserResponseCode.buildEnumResponseVO(UserResponseCode.RESPONSE_CODE_SYSTEM_ERROR, null);  
    }  
      
}

能够看到这里,咱们除了去掉了原来与LoadBalancerClient相关的逻辑以外,对于RestTemplate的使用,咱们的第一个url参数有一些特别。这里请求的host位置并无使用一个具体的IP地址和端口的形式,而是采用了服务名的方式组成。那么这样的请求为何能够调用成功呢?由于Spring Cloud Ribbon有一个拦截器,它可以在这里进行实际调用的时候,自动的去选取服务实例,并将实际要请求的IP地址和端口替换这里的服务名,从而完成服务接口的调用。app

在完成了上面你的代码编写以后,读者能够将eureka-server、eureka-client、eureka-consumer-ribbon都启动起来,而后访问http://localhost:2101/consumer ,来跟踪观察eureka-consumer-ribbon服务是如何消费eureka-client服务的/dc接口的,而且也能够经过启动多个eureka-client服务来观察其负载均衡的效果。Spring Cloud大型企业分布式微服务云架构源码请加企鹅求求:一七九一七四三三八零负载均衡

相关文章
相关标签/搜索