登录校验的实现思路是怎样的?
项目中访问核心资源,通常都要进行登录校验,访问京东商城的订单,必须要先登录才能访问查询
实现思路: 可以在访问资源前进行访问的拦截,判断你当前会话是否有登录,如果没有登录拒绝访问。如果是登录的那就可以进行访问资源。
- 用户输入用户名和密码提交登录请求。
- 服务器接收登录请求并验证用户名和密码的合法性。
- 如果用户名和密码合法,服务器生成一个会话(Session)并将用户的身份信息保存在会话中。(SpringBoot的web环境中,我们要想获取Session会话对象,直接就可以在Controller方法的形参中声明)( public Result login(@RequestBody Emp emp, HttpSession session))
- 服务器将会话ID返回给客户端,通常是通过在浏览器的Cookie中设置会话ID。
- 客户端在后续的请求中将会话ID附加在请求的头部或参数中发送给服务器。
- 服务器接收到请求后,从请求中获取会话ID,并根据会话ID查找对应的会话信息。
- 如果会话存在且有效,服务器认为用户已登录,并继续处理请求;如果会话不存在或已过期,服务器返回错误信息,要求用户重新登录。
- 在用户退出登录或会话过期时,服务器会删除对应的会话信息,客户端需要重新进行登录验证。
会话技术有哪些方式可以实现?
传统技术可以使用cookie+Session去实现会话,进行会话跟踪。但是这种传统方式有弊端: 不能在集群服务中灵活使用,手机客户端无法支持cookie。
为了解决这些问题,可以使用令牌技术来解决。令牌技术优点是:可以在集群服务中灵活使用,移动端也可以支持。
1,Cookie:Cookie存储会话信息,服务器在响应中设置一个包含会话ID的Cookie,客户端在后续的请求中将会话ID通过Cookie发送给服务器。服务器根据会话ID查找对应的会话信息。Cookie的优点是简单易用,但存在一些安全性和跨域限制。
2,Session:使用Token来实现无状态的会话管理。服务器在登录成功后生成一个Token,并将Token返回给客户端。客户端在后续的请求中将Token附加在请求的头部或参数中发送给服务器。服务器根据Token来验证用户身份和权限。Token的优点是无状态、可扩展性强,适用于分布式系统。
- 服务端集群环境下Session的共享问题。
- 移动端APP端无法使用Cookie。
令牌技术
- 使用 json 作为数据传输,有广泛的通用型,并且体积小,便于传输;
- 优点:可以实现无状态的会话管理,服务器不需要存储会话信息,从而提高系统的可扩展性和性能。同时,令牌可以灵活地应用于不同的客户端,如Web应用、移动应用等。
JWT令牌组成部分有哪些,各自作用是什么?
三部分组成:header.payload.signature 部分的数据会以Base64的方式进行编译
第一部分:Header(头),作用:记录令牌类型、签名算法等
第二部分:Payload(有效载荷),作用:携带一些用户信息及过期时间等
第三部分:Signature(签名),作用:防止Token被篡改、确保安全性