您的位置:首页 > 汽车 > 新车 > 后端Web之登录校验(上篇)

后端Web之登录校验(上篇)

2024/9/22 20:28:56 来源:https://blog.csdn.net/chencxiaobai/article/details/141469477  浏览:    关键词:后端Web之登录校验(上篇)

目录

1.概述

2.会话技术

3.JWT令牌


1.概述

基础的登录功能实际上就是查询数据库中有没有输入的用户和密码,有就放行,没有就返回错误信息,根据三层架构进行开发:

controller层:

service层:

 mapper层:

以上完成了基础的登录功能。此时通过路径访问,依然可以不输入用户信息而直接进入到系统中,下面添加登录校验功能,以保证必须登录才能访问。

登录校验:

登录校验,也称为身份验证(Authentication),是确认用户身份的过程。在计算机系统、网络或应用程序中,登录校验是一个关键的安全步骤,用于确保只有经过授权的用户才能访问受限资源。简单来说,就是只有用户登录了,才能进增删改查等操作。

我们在用户登录后建立一个登录标记,再利用拦截器拦截浏览器发送的请求,拦截器去判断是否有登陆标记,有就正常放行请求,没有就给浏览器返回错误信息。这样我们就构建了登录校验的功能。登录标记使用会话技术,统一拦截有两种,1.servlet中的过滤器filter。2.spring的拦截器interceptor

2.会话技术

会话技术(Session Technology)是Web应用程序用来识别和管理用户会话的一种机制。会话技术允许服务器在无状态的HTTP协议下跟踪用户的活动和状态。浏览器和服务器间的一次链接就称为一次会话。

简单来说,用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。

会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据。比如验证码,发送请求获取验证码图片,输入验证码登录又发送了一次请求。这两次请求之间就需要进行验证码值的对比,此时就要共享数据。

会话跟踪技术方案:1.客户端会话跟踪技术: Cookie  2.服务端会话跟踪技术: Session  3.令牌技术

Cookie:浏览器第一次登录时,服务端将生成一个cookie用于存储一些用户的数据信息,比如id。再将这个cookie返回给浏览器,浏览器本地存储这个cookie,这样每次浏览器发送请求都携带这个cookie给服务器,服务器有这个cookie值,就给浏览器请求放行,这样就完成了不同请求间的数据共享。

Tomcat也有cookie的api,可以方便的设置和获取cookie:

浏览器第一次请求后,服务端返回的cookie的值

在浏览器storage中存储了这个cookie,

再次请求服务端,将在请求头中携带这个cookie

cookie的优点是http协议支持cookie技术,一切动作都是浏览器自动进行的。

缺点是1.移动端无法使用cookie。2.cookie存储在用户本地,不安全而且用户可以禁用cookie。3.cookie不能跨域( 协议/IP/端口这三个维度有一个维度不同就是跨域操作)

例如在前后端分离的开发中,前后端部署在不同的服务器上,如果域名不同,登录时访问的前端登录页面,进入后却要访问后端,此时cookie就无法使用了。

session:实际上也是基于cookie实现的。不同的是Session值将存储在服务器端,服务器通过Session ID来识别和管理不同用户的Session。其他流程和cookie一致,服务端发送cookie,这个cookie中包含sessionID,每次请求浏览器都携带这个sessionID,由服务端判断ID是否存在,存在则放行。

Session的优点是值存储在服务端,即使cookie被他人恶意劫持修改了,ID不通过依然不会放行,因此比较安全。

缺点是1.服务器集群环境下无法直接使用session,因为请求访问的后端服务器可能不一样,a服务器存储了ID,但b服务器没有,那么就会被b服务器判断为第一次访问。2.由于基于cookie,因此也有cookie的部分缺点。

现在的企业基本都是用集群服务器,而以上两种方案存在许多问题,由此引入第三种方案:令牌技术,也是如今常用的用于登录认证的技术。

3.JWT令牌

JSON Web Tokens (JWT)定义了一种简洁的、 自包含的格式,用于在通信双方以json数据格式安全的传输信息。由于数字签名的存在,这些信息是可靠的。 官网:JSON Web Tokens - jwt.io

它是一种无状态的认证机制,它允许服务端生成一个包含用户信息和签名的Token,客户端在每次请求时携带这个Token,服务端通过验证Token的签名来确认用户的身份和权限。JWT的流程大致为:用户登录 → 获取Token → 携带Token请求资源 → 服务端验证Token并返回数据

简洁的:jwt令牌实际上就是一串字符串。自包含:看似随机的字符串中可以存储自定义信息

其组成如下:

JWT的生成和校验:

引入依赖

jwts工具类用于生成和校验

令牌一旦生成,篡改其任何一位都将无法通过校验,并且令牌存在有效期,过了有效期令牌就无法使用了。因此令牌是安全可靠的,避免了cookie可伪造等缺点。

登录后下发令牌:

以上就完成了在不同的请求之间数据的共享,通过判断浏览器发送的请求是否携带合法的jwt令牌。如何统一拦截请求并判断令牌合法放在下篇(filter/interceptor)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com