背景
随着社会的发展,现在前端展示的方式多样,由原本网页单一形式,到现在的网页、小程序、Android、IOS等多元化模式。由于前端展示的多元化,原有采用session有状态的认证方式已经无法满足需求,所以需要调整后台的技术框架,让系统能满足有状态认证和无状态token认证并存。
方案
后台的管理系统是采用码云上开源的renren-security系统,该系统采用的认证框架是Shiro。考虑系统采用原本的权限控制采用Session方式,整体风险大且时间周期长,所以整合考虑采用SessionId作为token的方式,进行无状态的token认证方式。
登录时,POST用户名与密码到/login进行登入,如果成功返回一个会话ID,以会话ID作为token,失败的话直接返回401错误。之后用户访问每一个需要权限的网址请求必须在header中添加Authorization字段,例如Authorization: token,token为密钥。后台会进行token的校验,如果有误会直接返回401。
Token验证
在login方法验证通过后,以SessionId作为token,通过json返回客户端。
Token校验流程
重写Sessionmanager的getSessionId方法,获取token作为SessionId,同时修改request的“REFERENCED_SESSION_ID”为token,因为token为验证通过的sessionId,所以此request也会采用验证通过的Session进行获取验证和权限。
流程
准备Maven文件
新建一个Maven工程,添加相关的依赖。
实现Realm
编写认证方法和授权方法。
重写SessionManager
重写继承DefaultWebSessionManager的SessionManager,修改getSessionId方法,通过获取的token作为SessionId。
配置Shiro
配置Realm和SessionManager,还有关于路径的拦截等配置。
整体配置可以参考:https://blog.csdn.net/qq_34996727/article/details/81133729
SessionManager可以参考:https://blog.csdn.net/u011456867/article/details/80484559
网友评论