前言关于小说系统源码身份认证的方式,最近在工作中用到了些,想着就干脆针对目前常用的身份认证组件的实际使用,就做一个总结,会涉及Json Web Token(JWT),Shiro的常见认证方式。传统的认证流程在学习这些组件的时候,还是需要熟悉一下认证的流程,其实一般的身份认证流程也不复杂,只是由于本身HTTP是无状态协议,因此需要交互多次才能验证用户身份。用户认证的一般流程如下1、用户向服务器发送用户名和密码2、若用户信息通过验证,在当前会话(session)中保存相关客户数据,比如用户登录时间和用户角色等等。3、服务器向用户发送一个session_id,存入用户端的cookie4、用户随后访问服务器的每一次请求,都需要带上cookie中的session_id5、服务器收到session_id之后,就可以根据session_id 找到对应的session用户数据。通过这个流程,至少应该知道了sessionid,session与cookie的区别,以及各自在web开发中的角色。同时需要说明的是,很多时候小说系统源码客户端会禁用cookie,因此更多的时候会用token机制替代sessionid,之后小说系统源码每次的请求都会在HTTP的header头中带上token。同时token还有更高级的认证用法,主要用于第三方登录的用户授权,当然这个是后话了。但是会发现,这个流程会有很多问题,其核心就是扩展性很差,如果只有一个服务器这个是没有任何毛病的,但是如果有多个服务器,如果实现了跨域访问,这个就有点麻烦了,解决方案其实也有无非就是以下几种思路一种解决思路就是session数据共享,让每台服务器都能从固定的地方读取session,比如将session存入统一的缓存中间件。另一种解决思路就是session持久化,直接将用户session数据存入到数据库或者持久层,这样工作量会很大,而且性能也会有一点影响,同时针对失效的session还需要有单独的定时任务批量删除。我个人归纳,如果需要服务端来维护session信息的,都属于比较传统的身份认证方式,如果session信息不需要服务端来维护,则属于非传统的身份认证方式,这种认证方式可扩展性较好。本篇博客总结一下传统的认证方式,并附上相关实例。实例项目的搭建用idea建立一个项目,然后搭建三个模块,整体接口如下准备一下SQLCREATEDATABASEdb_user_auth;USEdb_user_auth;–用户操作日志记录表CREATETABLElog
(id
int(11)NOTNULLAUTO_INCREMENT,user_id
int(11)DEFAULTNULLCOMMENT'用户id',user_name
varchar(255)CHARACTERSETutf8mb4DEFAULTNULLCOMMENT'用户名',create_time
datetimeDEFAULTNULLCOMMENT'操作时间', 【方案部署搭建可V or TG我昵称】memo
varchar(255)CHARACTERSETutf8mb4DEFAULTNULLCOMMENT'操作备注',PRIMARYKEY(id
))ENGINE=InnoDBAUTO_INCREMENT=2DEFAULTCHARSET=utf8COMMENT='操作日志';–用户表CREATETABLEuser
(id
int(11)NOTNULLAUTO_INCREMENT,user_name
varchar(100)CHARACTERSETutf8mb4NOTNULLCOMMENT'用户名',password
varchar(200)CHARACTERSETutf8mb4NOTNULLCOMMENT'密码',phone
varchar(50)NOTNULLCOMMENT'手机号',email
varchar(100)CHARACTERSETutf8mb4NOTNULLCOMMENT'邮箱',is_active
tinyint(11)DEFAULT'1'COMMENT'是否有效(1=是;0=否) 【方案部署搭建可V or TG我昵称】',create_time
datetimeDEFAULTNULLCOMMENT'创建时