SA-TOKEN
之前编写登录都是使用spring security,始终都没有太搞明白他的内在逻辑是怎么调用的,基本都是按照官方例子来进行的集成。后续了解到sa-token 框架,集成了登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权等功能。感觉功能真心强大,基本上常规的逻辑都进行封装,调用也比较简单,目前只是初步尝试登录认证功能,后续同步也会集成单点登录功能,权限认证。
登录整体需要配合前端使用,前端使用的是阿里开发的antd-admin框架,权限等都进行了简单开发。
Springboot侧
SA-TOKEN登录
StpUtil.login(localAccount.loginName)
非常简单,将登录名称作为key值调用sa-token中的login即可,由于采用的前后端分离,同步需要返回用户的权限,token。从SA-TOKEN中获取tokenValue返回到前端,前端通过获取到token调用后台请求时将token携带到请求heander中。
application.yml中的配置参数
sa-token:
# token名称 (同时也是cookie名称)
token-name: x-token
# token有效期,单位s 默认30天, -1代表永不过期
timeout: 2592000
# token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
activity-timeout: 100
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
is-concurrent: true
# 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
is-share: false
# token风格
token-style: uuid
# 是否输出操作日志
is-log: false
is-read-head: true
is-read-cooking: false
由于是无会话状态,所以需要禁用从cooking中获取token,改为从head中获取token。测试阶段我的token有效期设置为100s进行测试。
activity-timeout: 100 来进行配置
前端【Antd-Admin】
Login 【登录】 -- Login.vue
拿到后台的返回后设置账户,权限,token。
请求设置 -- request.js
设置上述值后,需要同步将token设置到localStorage中
登录后的每次请求都需要将token设置到请求heander中
全局拦截 -- axio-interceptors.js
从localStorage中获取token,判断token是否存在并进行跳登录判断。
简单集成后,基本完成了页面的登录,菜单权限,token判断等功能。实现非常简单,基本只需要几行代码就可以搞定登录认证功能。
后续待完成功能
前端
- token不存在跳登录
- token过期后,进行状态码的判断跳登录
后端
- 全局拦截token通过StpUtil.checkLogin()来进行token返回状态码
- 内存判断改为redis判断,通过SA-TOKEN的配置来进行处理
- 全局异常处理,返回不同的消息错误