写点什么

完整微服务化示例:使用 Apache ServiceComb 进行微服务开发、容器化、弹性伸缩 (四)

2019 年 12 月 25 日

完整微服务化示例:使用 Apache ServiceComb 进行微服务开发、容器化、弹性伸缩(四)

门卫 (Doorman)

门卫为公司提供安全保障,屏蔽非合法用户,防止其骗取免费服务,甚至伤害技工和养蜂人。


门卫认证服务

认证功能我们采用 JSON Web Token (JWT)(https://jwt.io/introduction/)的机制,具体实现超出了这篇文章的范围, 细节大家可以查看 github 上 workshop 的 doorman(https://github.com/huaweicse/ServiceComb-Company-WorkShop) 模块代码。


认证服务的接口如下,authenticate 方法根据用户名和密码查询确认用户存在,并返回对应 JWT token。用户登录后的每次 请求都需要带上返回的 JWT token,而 validate 方法将验证 token 以确认其有效。



public interface AuthenticationService { String authenticate(String username, String password);
String validate(String token);}
复制代码


门卫认证服务端点

与前两节的 Rest 服务端点相似,我们加上 @RestSchema 注释,以便 ServiceComb 自动配置端点、生成契约并注册服务。



@RestSchema(schemaId = "authenticationRestEndpoint")@Controller@RequestMapping("/rest")public class AuthenticationController {
private static final Logger logger = LoggerFactory.getLogger(AuthenticationController.class);
static final String USERNAME = "username"; static final String PASSWORD = "password"; static final String TOKEN = "token";
private final AuthenticationService authenticationService;
@Autowired AuthenticationController(AuthenticationService authenticationService) { this.authenticationService = authenticationService; }
@RequestMapping(value = "/login", method = POST, produces = TEXT_PLAIN_VALUE) public ResponseEntity<String> login( @RequestParam(USERNAME) String username, @RequestParam(PASSWORD) String password) {
logger.info("Received login request from user {}", username); String token = authenticationService.authenticate(username, password); HttpHeaders headers = new HttpHeaders(); headers.add(AUTHORIZATION, TOKEN_PREFIX + token);
logger.info("Authenticated user {} successfully", username); return new ResponseEntity<>("Welcome, " + username, headers, OK); }
@RequestMapping(value = "/validate", method = POST, consumes = APPLICATION_JSON_UTF8_VALUE, produces = TEXT_PLAIN_VALUE) @ResponseBody public String validate(@RequestBody Token token) { logger.info("Received validation request of token {}", token); return authenticationService.validate(token.getToken()); }}
class Token { private String token;
Token() { }
Token(String token) { this.token = token; }
public String getToken() { return token; }
@Override public String toString() { return "Token{" + "token='" + token + '\'' + '}'; }}
复制代码


同样,我们需要提供服务应用启动入口以及 microservice.yaml:



@SpringBootApplication@EnableServiceCombpublic class DoormanApplication {
public static void main(String[] args) { SpringApplication.run(DoormanApplication.class, args); }}
# all interconnected microservices must belong to an application wth the same IDAPPLICATION_ID: companyservice_description:# name of the declaring microservice name: doorman version: 0.0.1cse: service: registry: address: http://sc.servicecomb.io:30100 rest: address: 0.0.0.0:9090

复制代码


经理 (Manager)

为了管理所有人员和设施,经理作为用户唯一接口人,主要功能有:


  • 联系门卫认证用户,保护技工和养蜂人,以免非法用户骗取服务并逃避服务费用

  • 联系能力相符的技工和养蜂人,平衡工作量,避免单个人员工作超载

  • 管理项目归档,避免重复工作,保证公司收益最大化


由于经理责任重大,我们选取了业界有名的 Netflix Zuul(https://github.com/Netflix/zuul)作为候选人并加以培训, 提升其能力,以保证其能胜任该职位。


首先我们引入依赖:



<dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>spring-boot-starter-discovery</artifactId></dependency>

复制代码


本文转载自微服务蜂巢公众号。


原文链接:https://mp.weixin.qq.com/s?__biz=MzUxNTEwNTg5Mg==&mid=2247488670&idx=1&sn=7556990599cea8e0fd80ed54b9f39026&chksm=f9bae195cecd688332940d0b296909e8130d828104c36c20f49d76d43561f626eae24bd0c1ef&scene=0&xtrack=1&key=17fbc717c1803f309d535a4bdbc0f9c0d8d2089a5c7e455df8c0a5e6d824a6534b8476d2ad151cd45ed10eb7a15577914596444e867d96f615c277fc05fe951cef48de8b7d0732dcb4bc74f5c0e2f95a&ascene=14&uin=MTI5MjAyNjcyMQ%3D%3D&devicetype=Windows+10&version=62070158&lang=zh_CN&exportkey=AfH3CzqE%2F1ENttvg815y9Uo%3D&pass_ticket=oGcazNeaRfkuszcDU0L7jpfeTFZ3%2FULBAbPnhurUkiyW7DLvBVsoC%2Fh5OWX1zIsH


2019 年 12 月 25 日 18:10255

评论

发布
暂无评论
发现更多内容

一篇文章告诉你什么是EGG Network(阿凡提)以及什么是EFTalk

币圈那点事

Dubbo 学习笔记(一) Hello,Dubbo

U+2647

dubbo 四月日更

Boss直聘转发超120W次Java全栈面试题!已帮我拿下5个Offer!

Java架构追梦

Java 面试 架构师 全栈面试题 阿里巴巴面经总结

Linux 虚拟网络(一)

KernelNewbies

namespace 虚拟网络 veth tuntap bridge

《几何代数计算入门(计算机视觉)》

计算机与AI

计算机视觉 计算机图形学

MapReduce优化

大数据技术指南

hadoop 4月日更

你看起来很美味?独家揭露视频推荐系统AI秘方

白洞计划

framework源码,Android学习路线指南,已整理成文档

欢喜学安卓

android 程序员 面试 移动开发

HBase三个重要机制

五分钟学大数据

HBase 4月日更

数万人跪求!阿里P8大牛手写的《Java程序性能优化实战笔记》,GitHub标星已高达十万!

Java架构之路

Java 程序员 架构 面试 编程语言

Linux mkdir 命令

一个大红包

4月日更

NA(Nirvana)Chain“以应用而生”如何强势突围

区块链第一资讯

「开源免费」基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之动态表单设计器(五)

crudapi

Vue crud 动态表单 quasar cruapi

区块链技术驱动商业银行开展供应链金融业务的创新路径

CECBC区块链专委会

用OpenCV制作庆祝武汉重启一周年短视频

老猿Python

Python OpenCV 音视频 图形图像处理 灯光秀

【资深猎头分享】程序员面试如何避坑?

Java架构师迁哥

flutter开发环境搭建,京东面试真题解析,分享PDF高清版

欢喜学安卓

android 程序员 面试 移动开发

火爆火爆!最新分享给大家:Boss直聘转发超80W次的一套超全面试题总结

比伯

Java 架构 面试 程序人生 计算机

和老大的相爱相杀中,让我终于搞懂了函数式接口

麦洛

Java 函数式接口 Lambda java8

65w字!阿里分布式开发小册Github新开源!原理实践双飞

程序员小毕

Java 程序员 架构 面试 分布式

OpenHarmony 1.1.0 LTS 版本正式发布

开放原子开源基金会

开源 开放原子开源基金会 OpenHarmony

别当工具人了,手摸手教会你 Jenkins ! 码农很低调

比伯

Java 程序员 架构 计算机 技术宅

王者级Java核心文档,靠着这份开发手册知识原理清单,我拿下了8个offer

Crud的程序员

Java 编程 程序员 架构

Java高手是怎样炼成的?阿里P8技术大牛这份手写笔记告诉你答案!

Java架构之路

Java 程序员 架构 面试 编程语言

如何从Telegram下载一整套可爱的猫猫表情包?

彭宏豪95

GitHub 效率 社交 4月日更

redis Redis缓存穿透解决方案

Sakura

四月日更

读《非暴力沟通》

箭上有毒

读书笔记 4月日更

我是收藏一把好手

yes

学习

DEX领域第一个运用整合思维的DeFi协议 SumSwwap潜力巨大

币圈资讯

In-depth Java synchronized

shniu

Java并发 并发编程 Monitor

从Spring框架中的一个BUG来分析锁使用的问题

郑印

Java spring

低代码的认知误区与落地实践

低代码的认知误区与落地实践

完整微服务化示例:使用 Apache ServiceComb 进行微服务开发、容器化、弹性伸缩(四)-InfoQ