自己做一个商城网站怎么做,seo的工作流程,网站建设充值入口,上海网站建设管理1. 前端整合后端发短信接口
2. 注册功能
后端提供注册接口#xff0c;接受前端传入的参数#xff0c;创建新的用户对象#xff0c;保存到数据库。 接口设计#xff1a; 实现步骤#xff1a; 手机号码唯一性校验#xff08;后端一定要再次校验手机号唯一性#xff09…1. 前端整合后端发短信接口
2. 注册功能
后端提供注册接口接受前端传入的参数创建新的用户对象保存到数据库。 接口设计 实现步骤 手机号码唯一性校验后端一定要再次校验手机号唯一性基于手机号查询是否已经存在该手机号如果存在则返回异常。从redis中获取验证码与前端传入的验证码进行一致性校验如果不一致则抛出异常删除redis中的验证码创建用户对象填入参数并补充其它默认值对密码进行加密保存用户对象到数据库 编码实现 controller service 手机号码唯一性校验 注意 密码加密使用md5加盐值进行加密 Md5Utils.getMD5(password phone); phone即充当盐这是一个简单的实例实际业务中可以散列或者按照一定的规律进行增加复杂度即密码安全性。 整体业务 统一异常处理 统一异常处理后的核心业务 细节 对于redis中的key由于其可能具有复用性故可将其抽取成常量。
3. 登录实现
HTTP无状不会记录之前请求的信息每次请求都是独立的请求之间不会相互影响。Session登录 收到用户名密码后端进行校验后端校验通过后将用户存入Session再访问其他接口时判断Session中是否有对象如果有说明已经登录反之未登录。 加入Session后HTTP协议还是无状态的吗 Session的原理每个浏览器地依靠此访问Tomcat服务器的时候会创建一个Session对象并且生成一个唯一的SessionID将SessionID返回给浏览器浏览器将其存入Cookie中之后该浏览器的每次访问都会携带SessionID因此Tomcat可以根据SessionID来知道谁是谁。**Tomcat服务变成了有状态的服务。**缺点是无法做横向扩展。 基于TokenRedis的登录方式 前端传递用户名密码后端校验通过以后生成一盒token作为key用户对象作为value存入Redis并且将token返回给浏览器浏览器将其存储在本地之后每次发起请求时将token携带在请求头中基于token从Redis中获取判断token是否有效。 与Session登录的区别将原先存储在Session的数据存储在Redis中了实现了分布式Session的共享。 Session其实可以理解为一个抽象的概念即浏览器与服务器的会话。 这个时候Tomcat仍然是无状态的服务。 新的登录方案 既能实现Session访问的高效又能不用考虑数据共享问题保证服务/协议的无状态特性。 方案前端传递用户名密码给后端后端校验通过后生成一个唯一的token以及将用户基础信息返回给前端前端保存下来之后只要用户传了token就认为用户有登录。问题token可能被伪造无法确认token的有效性。 只要能够实现后端生成的token客户端用户收到后无法改造而且后端还有办法验证该token有效且可以实现针对token实现过期机制就可以采用这样的方案。基于JWT登录
JWTJSON Web Tokens是一种开放标准RFC 7519用于在两方之间安全地传输信息作为JSON对象。
这种信息传输可以被验证和信任因为它是数字签名的。JWTs常用于身份验证和信息交换特别是在Web应用程序中。JWT的组成
一个JWT通常由三部分组成分别是头部Header、有效载荷Payload和签名Signature。1. 头部Header:- 包含了用于处理令牌的类型typ通常是JWT和签名或加密算法alg如HMAC SHA256或RSA。2. 有效载荷Payload:- 包含所谓的“声明”Claims这些声明是关于实体通常是用户和其他数据的声明。- 有三种类型的声明注册声明如iss发行人、exp过期时间、公共声明通常自定义如用户ID和用户名和私有声明双方之间协商的信息。3. 签名Signature:- 用于验证消息在传输过程中未被篡改并且对于使用秘密密钥签名的令牌可以验证发送者的身份。- 签名是使用头部指定的算法以及服务器存储的秘密对于HMAC算法或私钥对于RSA和ECDSA来生成的。JWT的使用
在身份验证过程中当用户成功登录后服务器会创建一个JWT并将其发送回用户。然后用户在随后的请求中将此令牌发送回服务器以验证其身份并访问受保护的资源。JWT的优势
- 无状态和可扩展性JWT不需要在服务器上存储会话信息因为令牌本身包含了所有必要的信息。这对于构建可扩展的应用程序特别有用。
- 跨语言支持由于基于JSON格式JWT可以被任何支持JSON的语言使用。
- 安全性数字签名确保了在传输过程中令牌未被篡改。注意事项
- JWT不应包含敏感数据因为其有效载荷可以被解码即使是有签名的也只是防篡改而不是加密。
- 适当的安全措施应该用于处理JWT特别是在使用公开/私有密钥对的情况下。JWT因其简洁性和功能性在现代Web应用程序中被广泛使用特别是在实现无状态的API和单点登录SSO等场景中。编码 controller service