Guns第十一节,3.0项目介绍与项目拆分
管理模块的。
管理版本
管理依赖,maven实战。
,当parent打成jar包的时候,它不会包含这些jar包
,其他模块都会包含一些许许多多的jar包,这个是父项目的特点。
core就是其他服务公用的类,还有公用的依赖,
,所谓通用依赖,就是其他模块引用了这个core的话,其他模块就会有这个core里面的所有的通用依赖.
传递依赖,当你引入一个依赖的时候,你会引入它下面它里面包含的所有的依赖,就是所有的这些依赖。
通用依赖和传递依赖的区别:通用依赖默认通用依赖,compile当别人引用你这个gun-core的时候,它就会包含这个里面所有的compile的依赖。
传递依赖,就是说这个gun-core不需要这些依赖,如果别人引用core的话,如果需要的话,它会显式地传递这个依赖。
这些都可能在别的服务在引用了core之后会用到的一些类。所以封装成一个公共的项目。需要使用的时候引入guns-core就可以了。
这个项目是怎么运行的,运行的时候需要准备一个工具,因为这个服务它是提供rest-api的服务,他不是一个后台管理系统,所以说基本上没有页面,不能这样访问,所以说我们需要一个工具,这个工具叫postman,是谷歌上的一个插件,大家可以在谷歌应用上下载下来,这个工具是用来测试接口的,
,他可以post请求一些数据,还可以自己添加一些head。
下面介绍一些rest 服务的机制和流程。这个新项目的运行还需要打包,这个跟以前都一样,直接运行它可以,直接打包成jar,war包都可以。打包还是用maven命令打包
,其实这个打包没变,打包之后还是从这个target里面找这个jar包就行了
。
运行起来了,然后说一下我们怎么访问一个接口,我们访问之前需要获取一个token,我们访问一个接口需要有一个令牌,这个令牌就是jwt token
,打个比方就跟你古代进宫一样,你需要一个令牌才能进宫。我们的这些接口,常规的控制器
,都是一些资源,我们访问这些资源需要一个令牌,这个令牌是什么形式呢,其实它就是类似于这样的一个东西,
我们先获取它之后,然后带着令牌然后再获取资源。带着令牌怎么带呢,他是在header里面传入这个令牌
。就可以访问这些资源了
。
大致的流程就是这样,先获取令牌,再拿着令牌访问资源。就这样获取令牌呢?通过一个接口。
,大家可以看到RequestMapping这个地址
,它是写在配置文件里面。
,所以我们在访问的时候,请求令牌的地址就是
,然后我们需要请求的时候传入一个东西,我的请求令牌,其实这跟登陆差不多了,告诉你一个用户名密码,你登陆之后我颁发你一个令牌,然后你才可以访问资源,传给你这个控制器一个userName和password,
validate就是验证用户名,账号和密码是否正确,这里有两个实现类,第一个实现类就是写死了这个东西,简单的验证器
,只要你账号和密码都是admin,我就通过验证。还有一个就稍微复杂一点,查询一下数据库,如果在这个数据库里面有这个username,那么就return true就是验证通过。
这个,如果账号和密码都是admin,都让你访问这个资源。所以说我们先请求这个auth接口
。然后传给他userName和password。传完之后就获取到这个令牌。
就是随机的一个字符串,做签名时候用的
签名的作用就是传输中的数据没有被别人篡改。大家可以看到我这里已经写好了,如果写错了得话,请求的时候带上账号和密码。大家可以看到它会提示账号和密码错误
。得不到令牌了。
加入说我们就用这个令牌来访问hello这个控制器,
,然后我们看一下这个hello控制器
,控制器需要RequestBody,RequestBoay这个参数请求的是一对json
,所以我们请求的时候需要加点东西,首先加上这个token
粘贴到这个header里面
,这个值必须以bearer开头,这个呢是一个规范,可写可不写,但是在guns-rest里面必须写,因为我代码里面是这样实现的。然后加个
,因为要传json,
里面传一个这样的字符串
。
是怎么得来的呢,大家看SimpleObject
,她这里面就一个属性user,这样的格式其中sign和object是固定死了的
,必须的穿这两个值,这个object里面它可以随便写一些json对象
,
传完之后呢,我们有一个converter
,它会把这样格式的一个json转化成只接收它
,所以最后得到的结果就是user这样的json。转化到这个
里面形成这样的一个对象。
下面简单说一下他的流程,
这个就是我们的我们通过test写一些测试,然后生成一个类似于这样的一个json就是把这个
做一个签名,签名的过程就是这样的,首先我们把这个东西
复制到这个里面
然后把randomKey放到这个里面,通过这两个东西把我们传输的数据进行签名
,前面的过程就是md5签名。
把他的属性生成一个名字,然后再加上randomKey拼装起来进行md5加密,md5值设置到
就是我们需要传输的对象,它包含了sign和object这个两个值,首先设置一下object就是simpleOject,sign就是md5加密的值
,然后把
转化成json,
这个就是我们需要传递的数据
粘贴一下然后点发送,
返回结果是请求成功
签名就是防止数据被修改。
之后再详细介绍一下jwt,还有签名机制的这些filter,然后分享一下项目拆分的一些技巧,其实项目拆分比较简单,如果你是复杂的一个项目,你要分好业务它就 好拆分了,因为项目拆分主要是按业务拆分,不是按功能拆分,我们的业务比较少,就一个后台管理系统admin和rest,没有关联的,这个就是一个后台管理系统的一个框架。
按业务拆分,功能的话,相应项目的dao,相应项目的service都放在一个dao下,功能拆分有一个好处就是当你的访问量提高的时候,做分布式的话,你拆分的每一个项目都可以跑到一个机器上,就是单独的部署起来,可以拓展,项目拆分的话方便拓展,把相同的一些东西抽出来,然后快速的搭建一些新的项目,新的模块,这个就是拆分的时候的几个基准。
parent就是对其他的子项目进行一个管理,比如说modules,对版本号进行统一管理,对依赖统一管理,modules这样写的好处
,比如说我们直接编译parent,他就会一下编译四个
,他主要是方便了项目打包,项目测试,还有什么install,你执行
,都会包含子模块的执行。并且它可以分析顺序,它一定会先打core,写的时候注意
,这个点点是什么意思,这个模块在当前目录的上一级目录下的guns-admin