jhipster框架学习(二)

来源:互联网 发布:suse linux ftp 编辑:程序博客网 时间:2024/06/05 19:38

介绍由JHipster生成的微服务

      在《jhipster框架学习(一)》那篇文章里面我们已经介绍了jhipster的架构和每个微服务项目启动过程中可能遇到的小问题。现在我就介绍一下我自己使用jhipster框架生成的一个demo,我一共生成了两个微服务项目----网关gateway和用户微服务user,服务中心registry是在官网的github上下载的。先看一下我启动之后的服务中心界面吧:


如上图所示,在服务中心中我一共注册了两个微服务,GATEWAY就是我的网关,USER就是我的用户微服务。InstanceID是指微服务在注册中心registry的唯一标识,它的配置是在application-dev|prod.yml中配置的。关于微服务的启动配置文件我下篇文章中会介绍,这里就不贴出来了。微服务源码地址:https://git.oschina.net/liupengf/jhipsterKuangJiaXueXi。

接口调用演示---登录

既然项目都启动起来了,那我们该如何访问呢?目前我没有自己写过前台页面,一直都是使用接口调试工具postman来调试接口的。所以接下来我就演示一下注册登录及查询数据库信息的方法。因为在生成网关和用户微服务时我都选择了JWT的登录认证方式,所以我们的接口调用都需要带上JWT才可以正常访问。

what is JWT?

JWT 是Json Web Token的简称,该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

那么在jhipster平台中是如何使用JWT的?

JHipster官网大致是这样说的:

     Jhipster平台中使用的是JJWT liberary库(Json Web Token for Java),JWT是它的原型。token是由网关gateway生成的,并且把token分发到下面的每个微服务当中,也就是说他们共享一个key,微服务能够检查token并且用户认证也使用这个token。

这些令牌是自给自足的:它们具有认证和授权的信息,所以微服务应用不需要查询数据库或外部系统。是这点保证了微服务的可扩展性,所以很重要。

为了保证服务的安全运行,一个token必须在所有应用程序之间共享:

  • 对于每个应用,其默认的token是独一无二的,并通过JHipster产生,被存储在 .yo - rc.json 文件

  • 令牌的值可以通过修改在 src /mian/resources/config/application.yml 文件中的 jhipster.security.authentication.jwt.secret 的值来进行配置

  • 一个好的实践是在生产环境和开发环境采用不同的token

下面我用postman演示一下注册登录和调取微服务接口的方法:

1.注册


我的gateway网关端口是8082,所以注册的接口地址是localhost:8082/api/register。在body请求体中发送注册的用户名,密码和邮箱,三者缺一不可。邮箱是用来给你发送激活邮件用的。注册成功之后没有提示,但是我们可以在数据库中jhi_user表里面看到一条新的记录

到这里就说明我们注册成功了,但是我们还不能使用hellokitty这个账号来登录,因为此时它的activated字段是0,说明该用户还没有激活。需要我们去邮箱里面点击链接激活,或者直接在数据库中把这个字段改成"1"就可以登陆了。

2.登录

下面我就用已经激活过的账号来演示登录过程,我使用上图中的login=lpf3的账号来登录,如下图:


如上图所示,当我们登录成功之后,gateway会为我们生成一个token,并且这个token也同时发送到了user微服务中。

3.微服务接口调用

在访问接口之前,我们需要先做一点准备工作,首先我们在微服务user中使用命令来创建一个实体的增删改查,这里我创建一个名叫student的实体,属性只有一个name,并赋值为“jack”。接下来我们来查询student表中的信息。

说明:网关gateway 的本质是由Zuul来实现的,Zuul其实就是由一系列的过滤器组成的,它会代理所有注册到registry的服务,并且Zuul的路由规则如下:

http://ZUUL_HOST:ZUUL_PORT/微服务在registry中的applicationName/**会被转发到applicationName对应的微服务。


由于我们的微服务项目名是user,并且生成了一个叫student的实体,查看一下代码我们就很容易看到student实体对应增删改查的接口路径。根据前面Zuul的路由规则分析,我们的访问路径是http://localhost:8082/user/api/students。由于user微服务带有JWT认证,所以我们需要在请求体中带上刚才登录之后产生的token。规则如下:

key:Authorization      value:Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJscGYzIiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTUwMTQ4OTExMn0.jch2DHWZedRejGYPlwwk8JIVRCLf0s76hrGR7NmXcldEv5PcATnDghGkzPibilJgXpUDfeuXa8_ICca7EtbCjA

注意: value:后面的写法是Bearer+空格+token。

至此,jhipster平台搭建的微服务接口调用就演示完了,关于jhipster其他更多的知识点我也在一点点摸索实践。下一篇文章让我们一起来看看jhipster项目启动的过程。