實現一個帶有授權碼和使用時間限制的Spring Boot項目

  1. 生成和驗證授權碼
  2. 記錄授權時間和過期時間
  3. 實現授權邏輯

以下是具體的實現方法:

1. 生成和驗證授權碼

可以使用加密技術生成和驗證授權碼。授權碼中可以包含有效期等信息,并使用密鑰進行簽名。

示例代碼:

java復制代碼
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
import java.util.Date;
import java.util.concurrent.TimeUnit;public class LicenseManager {private static final String SECRET_KEY = "your_secret_key";public static String generateLicense(String userId, long durationInDays) throws Exception {long currentTime = System.currentTimeMillis();long expiryTime = currentTime + TimeUnit.DAYS.toMillis(durationInDays);String data = userId + ":" + expiryTime;Mac sha256HMAC = Mac.getInstance("HmacSHA256");SecretKeySpec secretKey = new SecretKeySpec(SECRET_KEY.getBytes(), "HmacSHA256");sha256HMAC.init(secretKey);String hash = Base64.getEncoder().encodeToString(sha256HMAC.doFinal(data.getBytes()));return Base64.getEncoder().encodeToString((data + ":" + hash).getBytes());}public static boolean validateLicense(String license) throws Exception {String decodedLicense = new String(Base64.getDecoder().decode(license));String[] parts = decodedLicense.split(":");if (parts.length != 3) return false;String data = parts[0] + ":" + parts[1];String hash = parts[2];Mac sha256HMAC = Mac.getInstance("HmacSHA256");SecretKeySpec secretKey = new SecretKeySpec(SECRET_KEY.getBytes(), "HmacSHA256");sha256HMAC.init(secretKey);String calculatedHash = Base64.getEncoder().encodeToString(sha256HMAC.doFinal(data.getBytes()));if (!calculatedHash.equals(hash)) return false;long expiryTime = Long.parseLong(parts[1]);return System.currentTimeMillis() <= expiryTime;}
}

2. 記錄授權時間和過期時間

通過授權碼生成和驗證,可以記錄和檢查授權時間和過期時間。

3. 實現授權邏輯

在Spring Boot應用中,通過攔截器或過濾器來驗證每次請求的授權碼。

示例代碼:

創建一個攔截器

java復制代碼
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@Component
public class LicenseInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String license = request.getHeader("License-Key");if (license == null || !LicenseManager.validateLicense(license)) {response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "License is invalid or expired");return false;}return true;}
}

注冊攔截器

在Spring Boot配置類中注冊攔截器:

java復制代碼
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate LicenseInterceptor licenseInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(licenseInterceptor).addPathPatterns("/**");}
}

4. 使用授權碼

公司使用項目時,需要將授權碼放在HTTP請求頭中:

http復制代碼
GET /your/api/endpoint
License-Key: generated_license_key

5. 重新授權

在3個月到期后,需要重新生成并分發新的授權碼。可以為此創建一個管理端點來幫助重新授權。

示例代碼:

java復制代碼
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class LicenseController {@GetMapping("/generateLicense")public String generateLicense(@RequestParam String userId, @RequestParam long durationInDays) throws Exception {return LicenseManager.generateLicense(userId, durationInDays);}
} 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82309.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82309.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82309.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

官方SDK停更后的選擇:開源維護的Bugly Unity SDK

騰訊Bugly&#xff0c;為移動開發者提供專業的異常上報和運營統計&#xff0c;幫助開發者快速發現并解決異常&#xff0c;同時掌握產品運營動態&#xff0c;及時跟進用戶反饋。 但是&#xff0c;免費版的Unity SDK已經很久不更新了&#xff0c;會有一些問題和特性缺失&#xff…

Spring Boot分頁查詢進階:整合Spring Data REST實現高效數據導航

目錄&#xff1a; 引言分頁查詢基礎回顧 2.1 Spring Data JPA分頁接口 2.2 Pageable與Page的使用 2.3 常見分頁參數設計Spring Data REST簡介 3.1 HATEOAS與超媒體驅動API 3.2 Spring Data REST核心功能 3.3 自動暴露Repository接口整合Spring Boot與Spring Data REST 4.1 項目…

[Datagear] [SQL]實現分組統計同時帶匯總行的兩種方式對比分析

在進行數據可視化開發時,我們經常會遇到用戶提出的需求:除了展示按某字段分組統計的數據外,還希望看到一個“整體總計”的數據行。這種匯總行在報表、圖表展示中極為常見,可以幫助用戶快速理解全局數據水平。 實現這一功能的方法主要有兩種:一種是使用 SQL 的 GROUP BY ..…

Docker常用命令介紹

Docker常用命令 1、本地鏡像管理 save 命令 將一個或多個 Docker 鏡像保存到一個 tar 歸檔文件中&#xff0c;以便在其他環境中分發或備份。 # 語法&#xff1a;docker save [OPTIONS] IMAGE [IMAGE...]# 保存單個鏡像到文件 docker save -o myimage.tar myimage:latest# 保…

09 接口自動化-用例管理框架pytest之allure報告定制以及數據驅動

文章目錄 一、企業級的Allure報告的定制左邊的定制&#xff1a;右邊的定制&#xff1a;1.用例的嚴重程度/優先級2.用例描述3.測試用例連接的定制4.測試用例步驟的定制5.附件的定制 二、企業中真實的定制有哪些&#xff1f;三、allure報告如何在本地訪問四、allure中的數據驅動裝…

DDoS防護實戰——從基礎配置到高防IP部署

一、基礎防護&#xff1a;服務器與網絡層加固 Linux內核優化&#xff1a; 調整TCP協議棧參數&#xff0c;緩解SYN Flood攻擊&#xff1a; # 啟用SYN Cookie并減少超時時間 echo 1 > /proc/sys/net/ipv4/tcp_syncookies echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout…

華為云Flexus+DeepSeek征文|Flexus云服務器Dify-LLM資源部署極致體驗Agent

前引&#xff1a;重磅來襲&#xff01;本次以DeepSeek-V3/R1商用大模型和Dify-LLM應用平臺一鍵部署為核心&#xff0c;專為新手打造“開箱即用”的AI開發體驗。無論你是想快速搭建企業級AI應用&#xff0c;還是探索大模型落地的無限可能&#xff0c;只需跟隨小編實現三步走&…

SQLAlchemy 2.0 查詢使用指南

SQLAlchemy 2.0 查詢使用指南 1. 環境設置 首先&#xff0c;需要安裝 SQLAlchemy 2.0 版本。假設你使用的是 SQLite 數據庫&#xff0c;可以通過以下命令安裝 SQLAlchemy&#xff1a; pip install sqlalchemy接著&#xff0c;我們創建數據庫連接并初始化會話&#xff1a; f…

Windows 使用 WSL 安裝 Ubuntu

一&#xff0c;前言 Windows 上輕松跑 Linux 又不想用笨重的VMware 和VirtualBox &#xff0c;怎么辦&#xff1f; 開源項目 Windows Subsystem for Linux (WSL)。它解決了許多開發者在 Windows 和 Linux 間切換的痛點&#xff0c;實現在 Windows 上無縫跑 Linux 工具和命令。…

[Excel VBA]如何製作買三送一優惠條件的POS結帳介面?

Excel I VBA I 買三送一優惠條件的POS結帳機 因應商品特賣活動&#xff0c;結帳介面需整合特定優惠條件&#xff0c;如買三送一&#xff0c;買五送二等等優惠條件。本文封面影片以買三送一為範例&#xff0c;並搭配VBA和對應按鈕&#xff0c;而實現銷售訂單紀錄和即時更新庫存等…

3d世界坐標系轉屏幕坐標系

世界坐標 ——> NDC標準設備坐標 ——> 屏幕坐標 標準設備NDC坐標系 屏幕坐標系 .project方法將 將向量(坐標)從世界空間投影到相機的標準化設備坐標 (NDC) 空間。 手動實現HTML元素定位到模型位置&#xff0c;實現模型標簽效果&#xff08;和css2Render原理同理&#…

Idea出現 100% classes 等

總是誤點出來&#xff0c;每次又忘了怎么消除&#xff0c;在這里記錄一下。 出現這樣&#xff1a; 操作idea界面的&#xff1a;點擊View->Tool Windows ->Coverage&#xff0c;然后關掉

從零開始學習QT——第一步

一、Qt 1.1、Qt是什么 Qt是一個跨平臺的C圖形用戶界面應用程序框架。它為應用程序開發者提供建立圖形界面所需的所有功能。它是完全面向對象的&#xff0c;很容易擴展&#xff0c;并且允許真正的組件編程。 1.2、Qt的發展歷程 1991年 Qt最早由芬蘭奇趣科技開發 1996年 進入商業…

MySQL 8.0 OCP 1Z0-908 171-180題

Q171.Examine this MySQL client command to connect to a remote database: mysql-h remote-example.org-u root–protocolTCP–ssl-mode Which two–ss1-mode values will ensure that an X.509-compliant certificate will be used to establish the SSL/TLS connection to …

【機器學習】 關于外插修正隨機梯度方法的數值實驗

1. 隨機梯度下降&#xff08;SGD&#xff09; 迭代格式&#xff1a; x k 1 x k ? η k ? f i ( x k ) x_{k1} x_k - \eta_k \nabla f_i(x_k) xk1?xk??ηk??fi?(xk?) 其中&#xff0c; η k \eta_k ηk? 為步長&#xff08;可能遞減&#xff09;&#xff0c; ? f…

每日c/c++題 備戰藍橋杯(洛谷P3382 三分法求極值詳解)

洛谷P3382 三分法求極值詳解 題目描述 P3382 三分法 要求在給定區間內尋找一個多項式函數的最大值點。題目保證函數在區間內先嚴格遞增后嚴格遞減&#xff08;單峰函數&#xff09;&#xff0c;適合使用三分法求解。 算法原理 三分法核心思想 對于單峰函數&#xff0c;在區…

[Windows] 一鍵實現重復工作自動化zTasker

zTasker&#xff0c;是一款定時&#xff5c;熱鍵&#xff5c;純粹的自動化任務神器。它支持超過100種任務類型&#xff0c;包括提醒、關機重啟、報時、擋屏休息、文件備份、音量調節、靜音等。用戶可以通過定時、CPU占用、文件夾監控、網速、快捷鍵等多種條件觸發任務。 簡單點…

Docker核心筆記

一、概述 1、架構 Docker容器基于鏡像運行,容器共享宿主機的內核,不會加載額外內核,通過Namespaces(環境隔離)和Cgroups(資源控制)實現隔離,Cgroups會限容器使用資源并控制優先級和統計數據。隔離后的容器僅包含應用所需的用戶態依賴 2、安裝 安裝先卸載再安裝,使用的yum…

2025年電工杯數學建模B題【垃圾運輸】原創論文分享

大家好呀&#xff0c;從發布賽題一直到現在&#xff0c;總算完成了2025年電工杯數學建模B題【垃圾運輸】完整的成品論文。 給大家看一下目錄吧&#xff1a; 目錄 摘 要&#xff1a; 一、問題重述 二&#xff0e;問題分析 2.1問題一 2.2問題二 2.3問題三 三、模型假設 …

[爬蟲知識] IP代理

相關實戰案例&#xff1a;[爬蟲實戰] 代理爬取&#xff1a;小白也能看懂怎么用代理 相關爬蟲專欄&#xff1a;JS逆向爬蟲實戰 爬蟲知識點合集 爬蟲實戰案例 引言&#xff1a;爬蟲與IP封鎖的攻防戰 對網絡爬蟲而言&#xff0c;遇到的一個較棘手的問題就是封IP&#xff1a;請…