首页 文章 精选 留言 我的

精选列表

搜索[SpringBoot4],共10000篇文章
优秀的个人博客,低调大师

Spring Cloud云架构-SSO单点登录之OAuth2.0 根据token获取用户信息(4)

上一篇我根据框架中OAuth2.0的使用总结,画了SSO单点登录之OAuth2.0 登出流程,今天我们看一下根据用户token获取yoghurt信息的流程: /** * 根据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); } } 我这里只是简单写了一些登出的代码,我们会在后面的文章中详细贴出所有代码供大家参考,而且会从创建数据库,到执行操作的每一个流程记录下来。 从现在开始,我这边会将近期研发的spring cloud微服务云架构的搭建过程和精髓记录下来,帮助更多有兴趣研发spring cloud框架的朋友,大家来一起探讨spring cloud架构的搭建过程及如何运用于企业项目。完整项目的源码来源 技术支持1791743380

优秀的个人博客,低调大师

「架构技术专题」架构核心指标之可扩展架构设计的三要素(4

业界对于可扩展的系统架构设计有一个朴素的理念,就是: 通过加机器就可以解决容量和可用性问题 这一理念在“云计算”概念疯狂流行的今天,得到了广泛的认可!对于一个规模迅速增长的系统而言,容量和性能问题当然是首当其冲的。但是随着时间的向前,系统规模的增长,除了面对性能与容量的问题外,还需要面对功能与模块数量上的增长带来的系统复杂性问题以及业务的变化带来的提供差异化服务问题。而许多系统,在架构设计时并未充分考虑到这些问题,导致系统的重构成为常态,从而影响业务交付能力,还浪费人力财力! 对此,《可扩展的艺术》一书提出了一个更加系统的可扩展模型——AKF可扩展立方(Scalability Cube)。这个立方体中沿着三个坐标轴设置分别为:X、Y、Z。 X轴扩展 —— 关注水平的数据和服务克隆,也就是前文提到的“加机器解决问题”Y轴扩展 —— 关注应用中职责的划分,比如数据类型,交易执行类型的划分Z轴扩展 —— 关注服务和数据的优先级划分,如分地域划分 整个扩展模型,用下图来表示,其中原点代表完全无扩展的状态。 一.X轴扩展 X轴扩展与我们前面朴素理念是一致的,通过绝对平等地复制服务与数据,以解决容量和可用性的问题。我们以生产汽车的工厂来举例:假设一个车间能完整的生产一辆汽车,为了短时间内生产更多的汽车,我们可以建设更多的车间,任何新增车间除了工作的效率可能不同之外,都是一个新的复制品,也能提供与原来车间相同的工作,生产出完整的汽车。给复制品分配工作就是一个X轴扩展的一个完美示例,说明了X轴扩展的思路,即把工作无偏向的分配给复制品,每个复制品在不考虑生产效率的情况下,谁来做这项工作是无偏向的,各个复制品之间不共享任何内容。 而在工程技术上来讲,X轴扩展主要有以下两种技术方案: 1.负载均衡 故名思议,负载均衡就是将用户的访问请求通过负载均衡器,均衡分配到由各个“复制品”组成的集群中去。当某个复制品出现故障,也能轻易地将相应“工作”转移给其它的复制品来“代为完成”。这中间涉及到的工程技术点包括了反向代理,DNS轮询,哈希负载均衡算法(一致性哈希),动态节点负载均衡(如按CPU,I/O)等。它的难点在于要求集群中的“复制品”是不共享任何内容,也就是我们常说的无状态。 2.数据复制 数据复制是指在数据存储层进行绝对平等地数据迁移,用于解决存储层I/O瓶颈以及可用性上的问题。由于存在多个复制品存储,为了使得每个复制品提供无差异的数据服务,我们需要在复制品之间同步或异步地复制数据。数据复制的方式包括了主从同步(常见的读/写分离),双主同步等。因为数据存储天生就是有状态的,数据复制的难点在于一致性的保证上,为了一致性的保证,从而也衍生了很多复杂的技术,比如Paxos选举算法等。 二.Y轴扩展 Y轴扩展表示的是根据数据的类型或者交易执行的类型(或者两者都有)来划分工作职责。一般称为面向服务或面向资源的扩展。我们再以生产汽车的工厂来举例:如亨利.福特所做的一样,将汽车制造的工序按专业性分成不同车间和流水线,不再是一个车间负责完成100%的任务,制造一辆完整的汽车,而是让这每个车间都执行一些子任务,如安装发动机,喷漆,安装玻璃等等。这样的分工,益处是明显的,每个车间负责的任务更简单,从而能更专业更高效的完成生产。 与汽车工厂的分工类似,为了降低系统复杂度,Y轴扩展会将庞大的整体应用拆分为一组服务。每个服务实现一组相关的功能,如订单管理、客户管理等。在工程上常见的方案是服务化架构(SOA)。比如对于一个电子商务平台,我们可以拆分成不同的服务,组成下面这样的架构: 但通过观察上图容易发现,当服务数量增多时,服务调用关系变得复杂。为系统添加一个新功能,要调用的服务数也变得不可控,由此引发了服务管理上的混乱。所以,一般情况下,需要采用服务注册的机制形成服务网关来进行服务治理。系统的架构将变成下图所示: 同时,为了提升单个服务的可用性和容量,对每一个服务进行X轴扩展划分。 三.Z轴扩展 Z轴扩展通常是指基于请求者或用户独特的需求,进行系统划分,并使得划分出来的子系统是相互隔离但又是完整的。继续以生产汽车的工厂来举例:福特公司为了发展在中国的业务,或者利用中国的廉价劳动力,在中国建立一个完整的子工厂,与美国工厂一样,负责完整的汽车生产。这就是一种Z轴扩展。 对于系统而言,Z轴扩展一般是为了满足差异性的需求或者是为了安全隔离而采取的扩展措施。比如为了提供VIP用户服务,可以将系统完整地复制一份出来,与普通用户所使用的系统完全隔离开来;再如,针对不同的地域用户,系统自动切换到对应地域的子系统,为用户提供服务,都可以认为是Z轴扩展。同时,在系统的灰度部署上,我们也通常使用Z轴扩展来完成。 工程领域常见的Z轴扩展有以下两种方案: 1.单元化架构 在分布式服务设计领域,一个单元(Cell)就是满足某个分区所有业务操作的自包含闭环。如上面我们说到的Y轴扩展的SOA架构,客户端对服务端节点的选择一般是随机的,但是,如果在此加上Z轴扩展,那服务节点的选择将不再是随机的了,而是每个单元自成一体。如下图: 2.数据分区 为了性能数据安全上的考虑,我们将一个完整的数据集按一定的维度划分出不同的子集。 一个分区(Shard),就是是整体数据集的一个子集。比如用尾号来划分用户,那同样尾号的那部分用户就可以认为是一个分区。数据分区为一般包括以下几种数据划分的方式: 数据类型(如:业务类型)数据范围(如:时间段,用户ID)数据热度(如:用户活跃度,商品热度)按读写分(如:商品描述,商品库存) 当然,数据分区也是有代价的,它将增加数据运维的难度,关联搜索的复杂度增加等。 总结: 一个在可扩展性上设计良好的系统,会充分考虑三个维度上的可扩展性。X轴上扩展处理的是平台或系统执行的交易量或工作量增长,虽然X轴扩展能够很好处理交易量的增长,但当系统复杂度的大幅度增加,或用户数量增加以及差异化服务需求出现,X轴扩展就难以应付了,如是我们可以通过Y轴扩展来处理系统复杂度增长的问题以及Z轴扩展来处理差异性化需求的问题。而当采用的扩展坐标轴不止一条时,那么X轴扩展总是其它扩展方法的次级划分。同时,这三个维度扩展性,使得系统性能上改善有了更多的方向,对于系统性能优化,也是至关重要。

优秀的个人博客,低调大师

卿苏德博士:关于区块链的真正落地,这4大应用场景很靠谱

关于区块链的实际应用场景,众说纷纭。但是宣传的太多,真正能落地的,或者已经落地的应用场景,非常少。 卿苏德博士从多年的经验和经历出发,带来了多个实际应用场景的分析与点评,很有启发性。顺着他的思路,我们找到了区块链在物流、能源、金融、食品溯源等众多方面的接地气的场景,也更能了解区块链的是与非,能与否。 以下为卿苏德博士在CSDN第四次沙龙中的干货分享,经区块链大本营整理发布,希望对你有所帮助。 卿苏德,博士研究生国家奖学金获得者,中国信息通信研究院云计算和大数据所区块链主管,高级工程师,可信区块链联盟办公室主任,国际电信联盟ITU-T FGDLT分布式账本焦点组测试评估牵头人。马化腾《数字经济》、周宏仁主任《中国信息化形势分析与预测(2017)》区块链章节撰稿人;中国信息通信研究院《全球区块链应用十大趋势》、《区块链在物联网中的应用》等报

优秀的个人博客,低调大师

1月4日云栖精选夜读:阿里工程师如何叫外卖?99%的人猜不到

为了解决订餐的烦恼,来自高德的阿里工程师勤硕,用技术做了一个非常好玩的事情,希望能给你带来一些启发,让我们一起快乐工作、认真生活。 热点热议 阿里工程师如何叫外卖?99%的人猜不到 作者:技术小能手 发表在:阿里技术 阿里巴巴大数据计算平台MaxCompute(原名ODPS)全套攻略(持续更新20171127) 作者:隐林 发表在:阿里巴巴大数据 —玩家社区 阿里入股高鑫零售后首个大动作!天猫商品上架大润发 作者:技术小能手 发表在:天下网商 知识整理 DB2 Vs MySQL系列 | MySQL与DB2的数据类型对比 作者:技术小能手 Github近期最有趣的10款机器学习开源项目 作者:技术小能手 发表在:数据派THU Nginx学习之配置RTMP模块搭建推流服务 作者:小柒2012 "舍简求繁"的MSN Spaces图片浏览器 作者:唐玄奘 MySQL案例-replication"卡死" 作者:wangwenan 美文回顾 设计模式之——单例模式 作者:苍狼~ 2018AI行业地图丨CB Insights:这100家AI初创公司募资额超百亿 作者:技术小能手 发表在:大数据文摘 【2018深度学习10大警示】多数芯片公司将破产;自我对弈可自动创造知识 作者:技术小能手 发表在:新智元 docker~环境变量到底怎么用 作者:mcy247 【案例学习】两年打造150,000个容器,看PAYPAL的Docker实践之路 作者:木环 发表在:阿里云容器服务 linux 如何查找命令的路径 作者:云栖希望。 【Android】不使用WebView来执行Javascript脚本(Rhino) 作者:walb呀 往期精选回顾 1月3日云栖精选夜读:如何用阿里云搭建自己的工业超算集群 1月2日云栖精选夜读:【2018新年巨献】像阿里巴巴一样高效工作!(含视频、文章、PDF文件) 12月29日云栖精选夜读:阿里搜索技术,在AI路上走了多远? 12月28日云栖精选夜读:阿里开源了14个核心技术,你了解哪些? 12月27日云栖精选夜读:实人认证 - 阿里云实人认证(公测)发布

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册