文章目录
1 什么是token?
token字面就是令牌的意思,token是服务端生成的一串字符串,以作客户端进行请求的令牌。即当第一次登录后,服务器生成一个token便将此返回给客户端,后继客户端再想浏览器请求时,只需带上这个token来校验即可,无需再次带上用户名和密码。
1.1 问题产生
在进行微信小程序后端开发时,涉及到服务端生成令牌(token)和oppenId给小程序端返回,emmm那么何为token?
1.2 问题分析
1.2.1 http协议的无状态
根据已有知识体系,token作为计算机前后端数据交流,同时又因为http是无状态协议,token则应起到一个标记的作用,来解决这个无状态。
1.2.2 业务中JWT令牌技术
业务开发中,使用到JWT令牌技术,那么JWT应该与token有相同的功能,JWT令牌由jwt令牌签名秘钥、令牌过期时间、有效载荷构成,token如果与jwt令牌有相同功能,那么他会有诸如此的构成吗?
1.3 问题解决
1.3.1 token的解释
token中文意思令牌。主要用来身份验证,由于其安全性、扩展性好特点,常用于web应用与移动应用上。
1.3.1 token出现的背景
http协议的无状态:
- 即:HTTP协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。
由于在web请求中,在早期,web基本就是用来浏览文档,http协议是无状态的,在这时候影响不大。而随着网络的发展,当我们进行购物时必须记录购物者是谁这时候,无状态肯定不行,那么人们就想到可不可以服务器给每人一个标记,来区分开每位购物者。
但是,这样对于服务器的开销太大,况且在集群环境中也不显示,多台服务器,一个服务器给个标记id并做记录,那用户下次登录,通过负载均衡,被转发到其他服务器,校验便会不通过,这就是个问题,这个机器可是没有标记id的。
最后解决方法,让客户端自己去保存
生成的标记id,这时候token(令牌)
感念就正式出现,它是将签名与签名算法一起组作为token存储在客户端,后继完成客户端与服务器安全通信。
1.3.2 JWT令牌的解释与区别
jwt是token的一种实现方式,它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。
JWT令牌看似是一段字符串,实质上我们可以在其上存储自定义数据内容,如:存储用户相关信息,即:jwt将原始JSON数据格式进行安全封装,便于通信双方安全进行通信或传输。
JWT的组成:
- JWT主要有三部分组成:Hender(头:令牌签名秘钥等)、Payload(有效载荷:携带自定义信息,默认信息等)、Signature(签名:防止
token
被篡改)、同时还会有令牌过期时间。
1.4 参考资料
什么是token?token是用来干嘛的?
什么是Token(令牌)
token与JWT详细介绍
2 什么是分层领域模型规约
这里主要说明《阿里巴巴Java开发规范》关于领域模型的部分介绍。
2.1 问题产生
在对项目开始进行规范化构建时,为了承载软件工程崽
“高内聚,低耦合”
的思想,常会让某一包执行某一具体功能,如:Controller层
的controller包,就是专职于解决,访问控制
的问题,那么其他vo
、pojo
、dto
等主要是要表达什么?
2.2 问题分析
DTO中定义了接收前端显示的字段,则其他也诸如此
2.3 问题解决
2.3.1 分层领域模型规约
命名 | 解释 |
---|---|
DO(Data Object) | 此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。 |
DTO(Data Transfer Object) | 数据传输对象,Service 或 Manager 向外传输的对象。 |
BO(Business Object) | 业务对象,由 Service 层输出的封装业务逻辑的对象。 |
AO(ApplicationObject) | 应用对象,在Web层与Service层之间抽象的复用对象模型, 极为贴近展示层,复用度不高。 |
VO(View Object) | 显示层对象,通常是 Web 向模板渲染引擎层传输的对象。 |
Query | 数据查询对象,各层接收上层的查询请求。注意超过 2 个参数的查询封装,禁止使用 Map 类来传输。 |
2.3.2 领域模型命名规约
命名 | 解释 | 说明 |
---|---|---|
PO :(persistant object ) | 持久对象 | 是与数据库中表相映射 的java对象。使用Hibernate来生成PO是不错的选择。 |
VO :(value object) | 值对象 | ① 常用于业务层间数据传递 ,和PO一样也仅仅包含数据。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要。② PO只能用在数据层,VO用在商业逻辑层和表示层。各层操作该层自己的数据对象,这样就可以降低各层间耦合 ,便于系统维护和扩展。 |
DAO :(Data Access Objects) | 数据访问对象接口 | 数据访问:就是与数据库打交道 。夹在业务逻辑与数据库资源中间。 |
BO :(Business Object) | 业务对象层 | 应用程序领域内“事物”所有实体类。这些实体类驻留在服务器上,利用服务类来协助完成它们的职责。 |
DTO (Data Transfer Object ) | 数据传输对象 | 主要用于需要大量传输对象 的地方。如:一张表有100个字段,对应的PO就有100个属性。但界面上只要显示10个字段 ,客户端用WEB service来获取数据,不需把整个PO对象传递到客户端 ,只需这10个属性的DTO来传递结果 到客户端,这样不会暴露服务端表结构,到达客户端以后,如果用这个对象来对应界面显示 ,那此时它的身份就转为VO |
POJO :(Plain Old Java Objects) | 简单的Java对象 | 就是普通JavaBeans使用POJO名称是为了避免和EJB混淆名称 , 而且简称比较直接,其中有一些属性及其getter、setter方法的类,有时可以作为value object或dto(Data Transform Object)来使用。 |