日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java接口安全怎么处理_Restful API 接口安全性设计

發布時間:2023/12/2 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java接口安全怎么处理_Restful API 接口安全性设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.API接口設計規范

2.安全性設計

a.白名單限制

僅接受特定系統的請求響應,調用方的IP地址需要在本系統中報備,否則無法調用

b.合法身份合法性驗證

Basic Authentication :這種方式是直接將用戶名和密碼放到Header中,使用 Authorization: Basic Zm9vOmJhcg== ,使用最簡單但是最不安全。

TOKEN認證:這種方式也是再HTTP頭中,使用 Authorization: Bearer ,使用最廣泛的TOKEN是JWT,通過簽名過的TOKEN。

Json web token (JWT), 是為了在網絡應用環境間傳遞聲明而執行的一種基于JSON的開放標準((RFC 7519).該token被設計為緊湊且安全的,特別適用于分布式站點的單點登錄(SSO)場景。

類似JWT,只是用戶登錄成功后將token信息是保存在redis中,可以設置token有效期,或主動將token失效等,并返回給用戶。

其他認證接口時必須在header中輸入token信息,并驗證。

@Aspect

@Component

public class SecurityAspect {

@Resource(name = "redisTokenManager")

private TokenManager tokenManager;

@Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping)")

public void controllerAspect() {

}

/**

* 接收到客戶端請求時執行

*

* @param pjp

* @return

* @throws Throwable

*/

@Around("controllerAspect()")

public Object execute(ProceedingJoinPoint pjp) throws Throwable {

// 從切點上獲取目標方法

MethodSignature methodSignature = (MethodSignature) pjp.getSignature();

Method method = methodSignature.getMethod();

/**

* 驗證Token

*/

if (method.isAnnotationPresent(TokenSecurity.class)) {

// 從 request header 中獲取當前 token

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())

.getRequest();

String token = request.getHeader(Constant.DEFAULT_TOKEN_NAME);

if (StringUtils.isEmpty(token)) {

throw new TokenException("客戶端X-Token參數不能為空,且從Header中傳入,如果沒有登錄,請先登錄獲取Token");

}

// 檢查 token 有效性

if (!tokenManager.checkToken(token)) {

String message = String.format("Token [%s] 非法", token);

throw new TokenException(message);

}

}

// 調用目標方法

return pjp.proceed();

}

}

OAuth2.0: 這種方式安全等級最高,- 但是也是最復雜的。如果不是大型API平臺或者需要給第三方APP使用的,沒必要整這么復雜。

c.流量控制可借助Guava中對應RateLimiter模塊功能,也可借助Redis高效響應機制自己設計,以調用方id+接口名稱為KEY,設置接口調用上限即可,按天實時更新數據增量。

限流控制:主要用于服務的請求頻率限制,避免由于服務吞吐量跟不上造成上層調用請求堆積過大而導致服務垮掉甚至應用奔潰問題。目前提供了單機版? ? ? ? 限流和分布式限流功能。簡而言之,通過限流控制,我們可以在方法級別的粒度控制到在XXX秒內最多接收XXX次調用。

并發控制:與限流控制類似,并發控制更加強調的是并發量。該功能能夠保證服務在任何時刻的并發量控制。目前提供了單機和分布式兩個版本的并發控? ? ? ? ? ? 制。簡而言之,通過并發控制,我們可以在方法級別的粒度控制到某個服務同時間最多不能超過XXX次請求被調用。

總結

以上是生活随笔為你收集整理的java接口安全怎么处理_Restful API 接口安全性设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。