后端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)**

相关推荐
shulu10 分钟前
C语言中宏可变参数的使用
java·服务器·c语言
goTsHgo24 分钟前
flink中slotSharingGroup() 的详解
java·数据库·flink
codelife32143 分钟前
Java使用Apache POI向Word文档中填充数据
java·word·apache
武子康1 小时前
大数据-135 - ClickHouse 集群 - 数据类型 实际测试
java·大数据·clickhouse·架构·flink·spark
mtc8n241 小时前
Redis - 集群篇 - 集群模式
数据库·redis·缓存
wowocpp1 小时前
springboot Ioc AOP POJO
java·spring boot·后端
秋意钟1 小时前
SpringBoot:Web开发(基于SpringBoot使用MyBatis-Plus+JSP开发)
java·spring boot·mybatis
s:1031 小时前
【OpenAPI】Spring3 集成 OpenAPI 生成接口文档
java·spring·openapi
繁依Fanyi1 小时前
SpringBoot + Vue + ElementUI 实现 el-table 分页功能详解
java·开发语言·人工智能·python·算法
binbinxyz1 小时前
MySQL EXPLAIN输出信息
数据库·mysql