SpringBoot+Ajax+redis實現(xiàn)隱藏重要接口地址的方法
前言
本篇文章主要講訴使用SpringBoot項目配合Ajax和redis實現(xiàn)隱藏重要接口地址,這里我以隱藏秒殺地址為例。
一、Ajax實現(xiàn)
前端代碼
簡單實現(xiàn)秒殺按鈕,input標(biāo)簽里存入的是秒殺商品的id,不許展示,所以隱藏??梢钥吹?,點(diǎn)擊秒殺按鈕會觸發(fā)getSeckillPath函數(shù)(獲取秒殺地址的函數(shù))。
<button class="btn btn-primary" type="submit" id="buyButton" onclick="getSeckillPath()">立即秒殺 <input type="hidden" name="goodsId" id="goodsId"> </button>
Ajax邏輯實現(xiàn)
- 基本邏輯:當(dāng)頁面觸發(fā)獲取秒殺地址的函數(shù),然后ajax異步請求服務(wù)器端獲取秒殺地址,服務(wù)器端返回隨機(jī)生成的秒殺地址,然后將返回對象作為參數(shù)傳入秒殺函數(shù),秒殺函數(shù)中ajax將秒殺地址拼接獲取完整秒殺地址向服務(wù)器端發(fā)送秒殺請求。
- 實現(xiàn):
- 真正秒殺地址:/seckill/path/doSeckill
- path是秒殺時隨機(jī)生成的,存入redis,以便后續(xù)訪問秒殺地址時比對是否時實時生成的正確秒殺地址
//獲取path:秒殺地址的拼接路徑
function getSeckillPath() {
//獲取秒殺商品id
var goodsId = $("#goodsId").val();
$.ajax({
url: "/seckill/path",
type: "GET",
data: {
goodsId: goodsId,
},
success: function (data) {
if (data.code == 200) {
var path = data.obj;
//獲取path后調(diào)取真正的秒殺地址
doSecKill(path);
} else {
layer.msg(data.message);
}
},
error: function () {
layer.msg("客戶端請求錯誤");
}
});
}
//真正的秒殺方法
function doSecKill(path) {
$.ajax({
//將獲取的path進(jìn)行拼接得到真正的秒殺地址
url: '/seckill/' + path + '/doSeckill',
type: "POST",
data: {
goodsId: $('#goodsId').val()
},
success: function (data) {
if (data.code == 200) {
// 獲取秒殺結(jié)果,這個函數(shù)不再貼出,自己根據(jù)項目自行實現(xiàn)
getResult($("#goodsId").val());
} else {
layer.msg(data.message);
}
}, error: function () {
layer.msg("客戶端請求出錯");
}
});
}二、服務(wù)器端實現(xiàn)
RespBean、RespBeanEnum是自己封裝的錯誤封裝類和錯誤枚舉類型,無需在意,只需要知道RespBean.error代表返回錯誤,RespBean.success()代表返回成功。
獲取秒殺地址:
/**
* @Description: 獲取秒殺地址
* @param user
* @param goodsId
* @param captcha
* @methodName: getPath
* @return: com.example.seckill.vo.RespBean
* @Author: dragon_王
* @Date: 2024-03-03 12:36:46
*/
@GetMapping(value = "/seckill/path")
@ResponseBody
public RespBean getPath(User user, Long goodsId) {
if (user == null) {
return RespBean.error(RespBeanEnum.SESSION_ERROR);
}
String str = orderService.createPath(user, goodsId);
return RespBean.success(str);
}
創(chuàng)建秒殺地址:
@Override
public String createPath(User user, Long goodsId) {
//利用UUID隨機(jī)生成秒殺地址
//然后對地址進(jìn)行簡單md5加密
String str = MD5Util.md5(UUIDUtil.uuid() + "123456");
//加密后地址存入redis
redisTemplate.opsForValue().set("seckillPath:" + user.getId() + ":" + goodsId, str, 1, TimeUnit.MINUTES);
return str;
}真正的秒殺請求:
@RequestMapping(value = "/seckill/{path}/doSeckill",method = RequestMethod.POST)
@ResponseBody
public RespBean doSeckill(@PathVariable String path, User user, Long goodsId){
if (user == null) {
return RespBean.error(RespBeanEnum.SESSION_ERROR);
}
//檢測秒殺地址是否正確
boolean check = orderService.checkPath(user, goodsId, path);
if (!check) {
return RespBean.error(RespBeanEnum.REQUEST_ILLEGAL);
}
//......
//真正秒殺邏輯實現(xiàn),自己自行實現(xiàn),不再贅訴
//......
return RespBean.success(0);
}檢查秒殺地址的方法:
/**
* @Description: 檢查秒殺地址
* @param user
* @param goodsId
* @param path
* @methodName: checkPath
* @return: boolean
* @Author: dragon_王
* @Date: 2024-03-03 15:47:55
*/
@Override
public boolean checkPath(User user, Long goodsId, String path) {
if (user == null || goodsId < 0 || StringUtils.isEmpty(path)) {
return false;
}
String redisPath = (String) redisTemplate.opsForValue().get("seckillPath:" + user.getId() + ":" + goodsId);
return path.equals(redisPath);
}總結(jié)
以上就是SpringBoot+Ajax實現(xiàn)隱藏重要接口地址的實現(xiàn)。
到此這篇關(guān)于SpringBoot+Ajax+redis實現(xiàn)隱藏重要接口地址的文章就介紹到這了,更多相關(guān)SpringBoot redis隱藏接口地址內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java字符串轉(zhuǎn)整數(shù)與拼接實戰(zhàn)指南
本文總結(jié)了Java中字符串轉(zhuǎn)整數(shù)和字符串相加的核心知識點(diǎn),本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2026-02-02
使用@PropertySource讀取配置文件通過@Value進(jìn)行參數(shù)注入
這篇文章主要介紹了使用@PropertySource讀取配置文件通過@Value進(jìn)行參數(shù)注入,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
詳解Java正則表達(dá)式中Pattern類和Matcher類
java.util.regex是一個用正則表達(dá)式所訂制的模式來對字符串進(jìn)行匹配工作的類庫包。包括兩個類Pattern和Matcher Pattern,Pattern是一個正則表達(dá)式經(jīng)編譯后的表現(xiàn)模式。Matcher對象是一個狀態(tài)機(jī)器,它依據(jù)Pattern對象做為匹配模式對字符串展開匹配檢查。2016-12-12
全網(wǎng)最新springboot整合mybatis-plus的過程
在本文中,介紹了 MyBatis-Plus 的核心功能和使用方法,包括如何配置分頁插件、編寫分頁查詢代碼、使用各種 Wrapper 構(gòu)建復(fù)雜查詢條件等,通過這些內(nèi)容,相信你已經(jīng)對 MyBatis-Plus 有了更深入的了解,并能夠在實際項目中靈活應(yīng)用這些功能,感興趣的朋友跟隨小編一起看看吧2025-02-02
Spring?Boot實現(xiàn)WebSocket實時通信
本文主要介紹了Spring?Boot實現(xiàn)WebSocket實時通信,包含實現(xiàn)實時消息傳遞和群發(fā)消息等功能,具有一定的參考價值,感興趣的可以了解一下2024-05-05
Spring Boot 中的 @PutMapping 注解原理及使用小結(jié)
在本文中,我們介紹了 Spring Boot 中的 @PutMapping 注解,它可以將 HTTP PUT 請求映射到指定的處理方法上,我們還介紹了 @PutMapping 注解的原理以及如何在 Spring Boot 中使用它,感興趣的朋友跟隨小編一起看看吧2023-12-12

