Sa-Token学习笔记-06

二级认证

在某些敏感操作下,我们需要对已登录的会话进行二次验证。

比如代码托管平台的仓库删除操作,尽管我们已经登录了账号,当我们点击 [删除] 按钮时,还是需要再次输入一遍密码,这么做主要为了两点:

  1. 保证操作者是当前账号本人。
  2. 增加操作步骤,防止误删除重要数据。

这就是我们本篇要讲的 —— 二级认证,即:在已登录会话的基础上,进行再次验证,提高会话的安全性。

相关API

// 在当前会话 开启二级认证,时间为120秒
StpUtil.openSafe(120); 

// 获取:当前会话是否处于二级认证时间内
StpUtil.isSafe(); 

// 检查当前会话是否已通过二级认证,如未通过则抛出异常
StpUtil.checkSafe(); 

// 获取当前会话的二级认证剩余有效时间 (单位: 秒, 返回-2代表尚未通过二级认证)
StpUtil.getSafeTime(); 

// 在当前会话 结束二级认证
StpUtil.closeSafe(); 

测试代码

package com.hayaizo.satoken.controller;

import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author moxiao
 */
@RestController
@RequestMapping("/safe/")
public class SafeAuthController {

    // 删除仓库    ---- http://localhost:8081/safe/deleteProject
    @RequestMapping("deleteProject")
    public SaResult deleteProject() {
        // 首先检查是否完成了二级认证
        if(!StpUtil.isSafe()){
            return SaResult.error("仓库删除失败,请完成二级认证后再次访问接口");
        }
        // 走到这里说明完成了二级认证
        return SaResult.ok("仓库删除成功!");
    }

    // 提供密码的二级认证接口    ---- http://localhost:8081/safe/openSafe?password=123456
    @RequestMapping("openSafe")
    public SaResult openSafe(String password){
        if("123456".equals(password)){
            // 对比成功,为当前会话开启二级认证,有效期为120s,在120s内调用则无需再进行二级认证
            StpUtil.openSafe(120);
            return SaResult.ok("二级认证成功!");
        }

        return SaResult.error("二级认证失败!");
    }

    // 手动关闭二级认证    ---- http://localhost:8081/safe/closeSafe
    @RequestMapping("closeSafe")
    public SaResult closeSafe(){
        StpUtil.closeSafe();
        return SaResult.ok();
    }
}
分类: Sa-Token 标签: Sa-Token

评论

暂无评论数据

暂无评论数据

目录