基于前后端分离的授权及认证(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值