diff --git a/backend/internal/middleware/crypto.go b/backend/internal/middleware/crypto.go index 6165ce6..5932e78 100644 --- a/backend/internal/middleware/crypto.go +++ b/backend/internal/middleware/crypto.go @@ -46,33 +46,36 @@ func (cm *CryptoMiddleware) ProcessRequest() gin.HandlerFunc { return } - var req interface{} - if err := json.Unmarshal(body, &req); err != nil { - c.JSON(400, gin.H{"code": 400, "message": "解析请求体失败"}) - c.Abort() - return - } + // 空请求体(如 GET 请求),跳过解析,直接放行 + if len(body) > 0 { + var req interface{} + if err := json.Unmarshal(body, &req); err != nil { + c.JSON(400, gin.H{"code": 400, "message": "解析请求体失败"}) + c.Abort() + return + } - reqMap, ok := req.(map[string]interface{}) - if ok { - if encryptedData, exists := reqMap["data"]; exists { - if dataStr, ok := encryptedData.(string); ok { - decrypted, err := cm.cryptoManager.Decrypt(dataStr) - if err != nil { - c.JSON(400, gin.H{"code": 400, "message": "解密失败: " + err.Error()}) - c.Abort() - return + reqMap, ok := req.(map[string]interface{}) + if ok { + if encryptedData, exists := reqMap["data"]; exists { + if dataStr, ok := encryptedData.(string); ok { + decrypted, err := cm.cryptoManager.Decrypt(dataStr) + if err != nil { + c.JSON(400, gin.H{"code": 400, "message": "解密失败: " + err.Error()}) + c.Abort() + return + } + + var decryptedData interface{} + if err := json.Unmarshal([]byte(decrypted), &decryptedData); err != nil { + c.JSON(400, gin.H{"code": 400, "message": "解析解密数据失败"}) + c.Abort() + return + } + + c.Set("decrypted_data", decryptedData) + c.Set("is_encrypted", true) } - - var decryptedData interface{} - if err := json.Unmarshal([]byte(decrypted), &decryptedData); err != nil { - c.JSON(400, gin.H{"code": 400, "message": "解析解密数据失败"}) - c.Abort() - return - } - - c.Set("decrypted_data", decryptedData) - c.Set("is_encrypted", true) } } }