久久精品123,午夜国产欧美理论在线播放,国产精品影视天天线,国内自拍亚洲

您的位置:首頁>新聞 > 數據 >

對敏感操作的二次認證 —— 詳解 Sa-Token 二級認證

2023-07-06 05:20:04    來源:博客園
一、需求分析

在某些敏感操作下,我們需要對已登錄的會話進行二次驗證。


(相關資料圖)

比如代碼托管平臺的倉庫刪除操作,盡管我們已經登錄了賬號,當我們點擊 [刪除]按鈕時,還是需要再次輸入一遍密碼,這么做主要為了兩點:

保證操作者是當前賬號本人。增加操作步驟,防止誤刪除重要數據。

這就是我們本篇要講的 —— 二級認證,即:在已登錄會話的基礎上,進行再次驗證,提高會話的安全性。

Sa-Token 是一個輕量級 java 權限認證框架,主要解決登錄認證、權限認證、單點登錄、OAuth2、微服務網關鑒權 等一系列權限相關問題。Gitee 開源地址:https://gitee.com/dromara/sa-token

本文將介紹在 SpringBoot 架構下,如何使用 Sa-Token 完成二級認證操作。

首先在項目中引入 Sa-Token 依賴:

    cn.dev33    sa-token-spring-boot-starter    1.34.0

注:如果你使用的是 SpringBoot 3.x,只需要將 sa-token-spring-boot-starter修改為 sa-token-spring-boot3-starter即可。

二、具體API

Sa-Token中進行二級認證非常簡單,只需要使用以下API:

// 在當前會話 開啟二級認證,時間為120秒StpUtil.openSafe(120); // 獲?。寒斍皶捠欠裉幱诙壵J證時間內StpUtil.isSafe(); // 檢查當前會話是否已通過二級認證,如未通過則拋出異常StpUtil.checkSafe(); // 獲取當前會話的二級認證剩余有效時間 (單位: 秒, 返回-2代表尚未通過二級認證)StpUtil.getSafeTime(); // 在當前會話 結束二級認證StpUtil.closeSafe(); 
三、一個小示例

一個完整的二級認證業務流程,應該大致如下:

package com.pj.cases.up;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import cn.dev33.satoken.stp.StpUtil;import cn.dev33.satoken.util.SaResult;/** * Sa-Token 二級認證示例  *  * @author kong * @since 2022-10-16  */@RestController@RequestMapping("/safe/")public class SafeAuthController {// 刪除倉庫    ---- http://localhost:8081/safe/deleteProject@RequestMapping("deleteProject")public SaResult deleteProject(String projectId) {    // 第1步,先檢查當前會話是否已完成二級認證 // 這個地方既可以通過 StpUtil.isSafe() 手動判斷,// 也可以通過 StpUtil.checkSafe() 或者 @SaCheckSafe 來校驗(校驗不通過時將拋出 NotSafeException 異常)    if(!StpUtil.isSafe()) {        return SaResult.error("倉庫刪除失敗,請完成二級認證后再次訪問接口");    }    // 第2步,如果已完成二級認證,則開始執行業務邏輯    // ...     // 第3步,返回結果     return SaResult.ok("倉庫刪除成功"); }// 提供密碼進行二級認證    ---- http://localhost:8081/safe/openSafe?password=123456@RequestMapping("openSafe")public SaResult openSafe(String password) {    // 比對密碼(此處只是舉例,真實項目時可拿其它參數進行校驗)    if("123456".equals(password)) {        // 比對成功,為當前會話打開二級認證,有效期為120秒,意為在120秒內再調用 deleteProject 接口都無需提供密碼         StpUtil.openSafe(120);        return SaResult.ok("二級認證成功");    }    // 如果密碼校驗失敗,則二級認證也會失敗    return SaResult.error("二級認證失敗"); }// 手動關閉二級認證    ---- http://localhost:8081/safe/closeSafe@RequestMapping("closeSafe")public SaResult closeSafe() {StpUtil.closeSafe();    return SaResult.ok();}}

全局異常攔截器,統一返回給前端的格式,參考:

@RestControllerAdvicepublic class GlobalExceptionHandler {    // 全局異常攔截     @ExceptionHandler    public SaResult handlerException(Exception e) {        e.printStackTrace();         return SaResult.error(e.getMessage());    }}

前提:二級認證時我們必須處于登錄狀態(可參考之前的登錄認證章節代碼),完成登錄后,調用接口進行二級認證校驗:

前端調用 deleteProject 接口,嘗試刪除倉庫。 ---- http://localhost:8081/safe/deleteProject后端校驗會話尚未完成二級認證,返回: 倉庫刪除失敗,請完成二級認證后再次訪問接口。前端將信息提示給用戶,用戶輸入密碼,調用 openSafe 接口。 ---- http://localhost:8081/safe/openSafe?password=123456后端比對用戶輸入的密碼,完成二級認證,有效期為:120秒。前端在 120 秒內再次調用 deleteProject 接口,嘗試刪除倉庫。 ---- http://localhost:8081/safe/deleteProject后端校驗會話已完成二級認證,返回:倉庫刪除成功。四、指定業務標識進行二級認證

如果項目有多條業務線都需要敏感操作驗證,則 StpUtil.openSafe()無法提供細粒度的認證操作,此時我們可以指定一個業務標識來分辨不同的業務線:

// 在當前會話 開啟二級認證,業務標識為client,時間為600秒StpUtil.openSafe("client", 600); // 獲?。寒斍皶捠欠褚淹瓿芍付I務的二級認證 StpUtil.isSafe("client"); // 校驗:當前會話是否已完成指定業務的二級認證 ,如未認證則拋出異常StpUtil.checkSafe("client"); // 獲取當前會話指定業務二級認證剩余有效時間 (單位: 秒, 返回-2代表尚未通過二級認證)StpUtil.getSafeTime("client"); // 在當前會話 結束指定業務標識的二級認證StpUtil.closeSafe("client"); 

業務標識可以填寫任意字符串,不同業務標識之間的認證互不影響,比如:

// 打開了業務標識為 client 的二級認證 StpUtil.openSafe("client"); // 判斷是否處于 shop 的二級認證,會返回 false StpUtil.isSafe("shop");  // 返回 false // 也不會通過校驗,會拋出異常 StpUtil.checkSafe("shop"); 

代碼示例:

package com.pj.cases.up;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import cn.dev33.satoken.stp.StpUtil;import cn.dev33.satoken.util.SaResult;/** * Sa-Token 二級認證示例  *  * @author kong * @since 2022-10-16  */@RestController@RequestMapping("/safe/")public class SafeAuthController {// ------------------ 指定業務類型進行二級認證 // 獲取應用秘鑰    ---- http://localhost:8081/safe/getClientSecret@RequestMapping("getClientSecret")public SaResult getClientSecret() {    // 第1步,先檢查當前會話是否已完成 client業務 的二級認證 StpUtil.checkSafe("client");    // 第2步,如果已完成二級認證,則返回數據     return SaResult.data("aaaa-bbbb-cccc-dddd-eeee");}// 提供手勢密碼進行二級認證    ---- http://localhost:8081/safe/openClientSafe?gesture=35789@RequestMapping("openClientSafe")public SaResult openClientSafe(String gesture) {    // 比對手勢密碼(此處只是舉例,真實項目時可拿其它參數進行校驗)    if("35789".equals(gesture)) {        // 比對成功,為當前會話打開二級認證:    // 業務類型為:client     // 有效期為600秒==10分鐘,意為在10分鐘內,調用 getClientSecret 時都無需再提供手勢密碼         StpUtil.openSafe("client", 600);        return SaResult.ok("二級認證成功");    }    // 如果密碼校驗失敗,則二級認證也會失敗    return SaResult.error("二級認證失敗"); }// 查詢當前會話是否已完成指定的二級認證    ---- http://localhost:8081/safe/isClientSafe@RequestMapping("isClientSafe")public SaResult isClientSafe() {    return SaResult.ok("當前是否已完成 client 二級認證:" + StpUtil.isSafe("client")); }}
五、使用注解進行二級認證

在一個方法上使用 @SaCheckSafe注解,可以在代碼進入此方法之前進行一次二級認證校驗

// 二級認證:必須二級認證之后才能進入該方法 @SaCheckSafe      @RequestMapping("add")public String add() {    return "用戶增加";}// 指定業務類型,進行二級認證校驗@SaCheckSafe("art")@RequestMapping("add2")public String add2() {    return "文章增加";}

標注 @SaCheckSafe的方法必須在二級認證后才能訪問成功,其效果與代碼 StpUtil.checkSafe()等同。

參考資料Sa-Token 文檔:https://sa-token.ccGitee 倉庫地址:https://gitee.com/dromara/sa-tokenGitHub 倉庫地址:https://github.com/dromara/sa-token

關鍵詞:

相關閱讀

久久精品123,午夜国产欧美理论在线播放,国产精品影视天天线,国内自拍亚洲
久久精品水蜜桃av综合天堂| 国产精品国产三级国产专播品爱网| 99精品视频免费观看| 亚洲国产91色在线| 国产一区二区三区精品久久久| 国内精品久久久久影院 日本资源| 亚洲伊人久久综合| 国产精品高潮久久| 在线视频一区二区| 蜜桃av一区二区三区| 国产色综合天天综合网| 欧美精品自拍| 欧美黄色影院| 亚洲桃色在线一区| 国产精品网红福利| 中文高清一区| 久久久国产精品亚洲一区| 在线免费观看日本一区| 亚洲一区免费看| 国产曰批免费观看久久久| 欧美精品七区| 篠田优中文在线播放第一区| 久久成人精品无人区| 国产欧美日韩一级| 久久精品一区二区三区四区| 欧美无乱码久久久免费午夜一区| 狠狠色丁香婷婷综合久久片| 免费久久99精品国产自| 亚洲国产精品va在线看黑人| 欧美精品在线一区二区| 精东粉嫩av免费一区二区三区| 免费精品99久久国产综合精品| 国产精品久久久久久久电影| 夜夜嗨av一区二区三区免费区| 国产精品久久久久国产a级| 国模精品一区二区三区色天香| 一本久久综合亚洲鲁鲁| 欧美日韩一区二区三区在线观看免| 亚洲国产日韩欧美在线图片| 欧美成人tv| 一区二区三区你懂的| 欧美一二区视频| 久久久久久亚洲精品中文字幕| 亚洲一区二区三区视频播放| 国产一区在线看| 久久成人综合视频| 亚洲丰满少妇videoshd| 国产精品99久久久久久白浆小说| 欧美韩日高清| 欧美成人按摩| 亚洲人成在线播放网站岛国| 精品二区久久| 亚洲精品美女久久7777777| 国产视频欧美视频| 麻豆9191精品国产| 欧美在线精品免播放器视频| 久久人人97超碰人人澡爱香蕉| 国产精品老牛| 久久精品国产91精品亚洲| 一色屋精品视频免费看| 亚洲视频在线播放| 欧美伊人久久久久久午夜久久久久| 久久精品夜色噜噜亚洲a∨| **网站欧美大片在线观看| 国产精品国产三级国产普通话三级| 欧美大片专区| 久久久av水蜜桃| 亚洲网在线观看| 久久久久久久成人| 久久av一区二区| 精品成人a区在线观看| 欧美激情在线狂野欧美精品| 性色一区二区三区| 午夜一区二区三视频在线观看| 最近中文字幕mv在线一区二区三区四区| 国产一区二区三区久久精品| av72成人在线| 久久国产精品99久久久久久老狼| 在线免费观看日本欧美| 久久精品视频播放| 久久精品五月婷婷| 欧美精品久久久久久| 国产日韩一区欧美| 久久亚裔精品欧美| 久久久久成人网| 亚洲欧洲中文日韩久久av乱码| 欧美午夜一区二区福利视频| 国产精品乱码| 在线中文字幕日韩| 国产精品免费福利| 亚洲高清在线观看一区| 国产视频综合在线| 免费看黄裸体一级大秀欧美| 国产亚洲一区精品| 欧美三级午夜理伦三级中视频| 91久久线看在观草草青青| 亚洲精品欧洲精品| 国产精品无码永久免费888| 欧美国产亚洲视频| 午夜精品福利在线| 亚洲国产aⅴ天堂久久| 欧美亚洲日本网站| 欧美手机在线视频| 欧美一级在线播放| 欧美一区二区三区日韩| 国产精品久久久久9999高清| 老鸭窝亚洲一区二区三区| 亚洲国产精品99久久久久久久久| 久久久久9999亚洲精品| 亚洲视频一区| 国产日韩欧美在线观看| 欧美人体xx| 国产精品试看| 亚洲精品乱码久久久久久| 黄色小说综合网站| 国产精品福利影院| 女人香蕉久久**毛片精品| 久久色在线观看| 亚洲免费高清视频| 久久久91精品| 国产精品青草久久| 亚洲全黄一级网站| 99视频在线精品国自产拍免费观看| 亚洲另类视频| 国产精品一区二区在线观看网站| 国内精品久久久久国产盗摄免费观看完整版| 欧美日韩视频在线一区二区| 欧美激情第三页| 亚洲一区二区三区四区五区黄| 亚洲国产视频一区| 欧美日韩精品一区二区三区| 一本色道久久综合亚洲精品小说| 日韩视频在线观看国产| 亚洲五月婷婷| 亚洲激情在线观看| 国产一区二区按摩在线观看| 狠狠色综合日日| 国产视频一区二区三区在线观看| 久久精品视频免费播放| 国产一区二区在线观看免费播放| 国产欧美一区二区三区在线老狼| 欧美中文字幕视频| 欧美 亚欧 日韩视频在线| 久久综合网络一区二区| 激情久久婷婷| 亚洲精品一区久久久久久| 国产日本欧美视频| 看片网站欧美日韩| 欧美日韩在线影院| 久久疯狂做爰流白浆xx| 激情欧美一区二区三区在线观看| 激情欧美一区二区三区在线观看| 1000部国产精品成人观看| 欧美日韩一区在线视频| 美日韩在线观看| 亚洲视频专区在线| 韩国一区电影| 欧美日韩三区| 狠狠爱成人网| 国产日韩欧美综合精品| 亚洲日本中文字幕免费在线不卡| 亚洲资源av| 欧美国产精品| 久久久久久久久岛国免费| 久久免费精品视频| 午夜精品福利在线观看| 国产欧美一区视频| 尹人成人综合网| 欧美一区二区视频在线观看2020| 亚洲精品免费电影| 一区二区三区在线观看视频| 亚洲一卡久久| 欧美jizz19hd性欧美| 老司机精品视频一区二区三区| 亚洲一区二区成人在线观看| 99视频在线精品国自产拍免费观看| 亚洲免费影视第一页| 久久国产一区二区| 国产精品欧美一区二区三区奶水| 亚洲午夜电影网| 久久精品二区| 亚洲第一色在线| 亚洲影院免费| 亚洲国产成人av好男人在线观看| 日韩视频一区二区三区在线播放免费观看| 亚洲精品国精品久久99热一| 欧美成人在线网站| 欧美日本在线播放| 欧美国产丝袜视频| 国产精品视频在线观看| 欧美福利视频| 欧美精品日韩一区| 性做久久久久久久久| 欧美在线欧美在线| 欧美亚洲尤物久久| 亚洲欧美日韩精品久久| 国产在线精品一区二区夜色| 99成人免费视频| 激情综合色丁香一区二区| 亚洲在线视频一区|