基于前后端分离的授权及认证(Shiro-SpringBoot-Vue)
Posted 你,好
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于前后端分离的授权及认证(Shiro-SpringBoot-Vue)相关的知识,希望对你有一定的参考价值。
第一次写前后端分离的登录认证以及授权,写篇博客记录一下。
- 登录认证
- 前端,用户输入用户名密码,通过axios请求后端登录接口。
- 后端通过
SecurityUtils.getSubject()
获取Subject对象,再根据传来的用户名、密码创建一个UsernamePasswordToken用于认证,调用subject.login(token)
来进行登录认证。 - 认证失败,则抛异常:
UnknownAccountException
:未知用户异常、CredentialsException
密码错误异常 - 认证成功:则初始化Subject对象,方便用户获取当前主体信息,同时自定义RedisSessionDao会将当前session信息以
用户名:sessionId
为键存储到redis中。 - 将sessionId当作token返回给前端。
- 认证结束。
- 授权
- 前端,将token写入请求头,请求接口。
- 后端,接收请求,shiro创建主体(Subject),委派sessionManager创建会话(Session)。在获取sessionId时,使用自定义sessionManager,将请求头中token赋值给sessionId。这样,前后端就通过token来维持了会话。
- 第一次访问没有缓存,shiro会调用自定义Realm中的
doGetAuthorizationInfo
方法获取数据库中的权限信息生成AuthorizationInfo对象。并通过自定义RedisSessionDao将权限信息保存进redis,生成缓存。 - 遍历AuthorizationInfo中的权限,看是否有所需权限。
- 有所需权限,继续执行业务代码。
- 没有所需权限,抛出
AuthorizationException
异常。 - 授权结束。
具体代码在GitHub
以上是关于基于前后端分离的授权及认证(Shiro-SpringBoot-Vue)的主要内容,如果未能解决你的问题,请参考以下文章