Sa-Token使用笔记(三)------ 二级认证

背景

开发文档中,省长给出了简洁的二级认证实现:使用注解进行二级认证”,只需一个 @SaCheckSafe 注解即可。但实际使用中,还是需要做更多操作的。

  • 二级认证(二次登录)的操作时机应在何时?
  • 如何通知用户需要二级认证(页面上)?
  • 如何自动控制页面跳转,完成一个完整的二级认证过程?

准备:

  • @SaCheckSafe 的本质:StpUtil.checkSafe()方法。即“检查当前会话是否已通过二级认证,如未通过则抛出异常”。
  • 二级认证的操作流程应为:开启二级认证 > 二次登录(有效期内) > 完成(结束)二级认证。
  • 二次登录的实质:StpUtil.login(Object id)

具体操作:

  1. 当第一次访问需要二级认证的URL时(文中将此标记为"lastUrl",相应方法上应有 @SaCheckSafe 注解),被 @SaCheckSafe 截断,抛出 NotSafeException 异常。
  2. 全局异常处理:捕获 NotSafeException 异常,即当前场景需二级认证;并获取当前请求URl,即lastUrl。开启二级认证,即调用StpUtil.openSafe(120) 方法;之后将lastUrl作为“FlashAttribute”进行传参,重定向至视图/reLogin。
  3. 此时用户面前呈现的是/reLogin页面(即相当于完成通知用户的工作)。用户在输入密码提交时(提交至/doReLogin),浏览器后台应同时将传入的lastUrl提交给服务后端。后端/doReLogin进行密码验证和二次登录操作。完成后,重定向至lastUrl。
  4. 此时,第二次访问lastUrl时,将不再被 @SaCheckSafe 截断。至此,完整的二级认证过程完成。

注意

  • 进行二级认证的过程里,需手动开启二级认证:即调用StpUtil.openSafe(xxx) 方法。
  • 二级认证时,应注意配置:is-concurrent: trueis-share: true,即允许同一账号并发登录且所有登录共用一个token。同时应注意,二级认证的适用场景。
  • 可考虑将二次登录页面url和二次登录处理url设计为同一个,更简洁。
  • API接口的二级认证,应只需做到通知用户即可。
  • 待探索:
    • 当前框架是否有更好实现二级认证的可能
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值