配置403forbidden怎么解决

403forbidden怎么解决  时间:2021-04-04  阅读:()
应用配置管理ACM开发指南-----开发指南SDK参考SDK简介ACMSDK是ACM提供给用户的获取配置手段,用于获取、监听配置.
ACMSDK目前支持以下类型:ACMJavaNativeSDK:支持ACM配置监听和变更的Java原生SDK.
SpringCloudACM:基于ACMJavaNativeSDK封装的支持SpringCloudConfig接口规范的JavaSDK.
ACMNode.
jsSDK:支持ACM配置监听和变更的Node.
js原生SDK.
ACMC++SDK:支持ACM配置监听和变更的C++原生SDK.
ACMPython(已开源):支持ACM配置监听和变更的Python原生SDK.
ACMSDK的功能特性如下:功能/语言JavaNativeJavaSpringCloudPythonNode.
JSC++获取特定配置支持支持支持支持支持监听特定配置支持支持支持支持支持写入配置支持不支持不支持不支持不支持支持固定租户下枚举配置支持不支持不支持不支持不支持支持单一IP方式进行服务端连接支持不支持支持不支持不支持支持多IPLB方式进行服务端连接*支持支持支持支持支持应用配置管理ACM开发指南1--注*:多IPLB方式是指ACMSDK基于地址服务器返回的多ACM服务端IP地址的LoadBalance功能,以增加性能和实现高可用.
注**:本地缓存备份功能可以让ACMSDK在没有服务端连接情况下,通过读取上次获取配置后保存的本地缓存备份文件,来避免客户端应用宕机.
ACMJavaNativeSDK环境准备本文介绍ACMAPI的接入步骤,包含SDK的获取及示例代码.
SDK获取直接填写以下POM的配置,依赖API的SDK即可.
示例代码支持HmacSHA1算法方式用户认证支持支持支持支持支持支持本地缓存备份**支持支持支持支持支持开源地址计划中计划中acm-sdk-python计划中计划中com.
alibaba.
edas.
acmacm-sdk1.
0.
6ch.
qos.
logbacklogback-classic1.
1.
7应用配置管理ACM开发指南2importjava.
util.
Properties;importcom.
alibaba.
edas.
acm.
ConfigService;importcom.
alibaba.
edas.
acm.
exception.
ConfigException;importcom.
alibaba.
edas.
acm.
listener.
ConfigChangeListener;importcom.
alibaba.
edas.
acm.
listener.
PropertiesListener;//示例代码,仅用于示例测试publicclassACMTest{//属性/开关privatestaticStringconfig="DefaultValue";privatestaticPropertiesacmProperties=newProperties();publicstaticvoidmain(String[]args){try{//从控制台命名空间管理中拷贝对应值Propertiesproperties=newProperties();properties.
put("endpoint","$endpoint");properties.
put("namespace","$namespace");properties.
put("accessKey","$accessKey");properties.
put("secretKey","$secretKey");//如果是加密配置,则添加下面两行进行自动解密//properties.
put("openKMSFilter",true);//properties.
put("regionId","$regionId");ConfigService.
init(properties);//主动获取配置Stringcontent=ConfigService.
getConfig("${dataId}","${group}",6000);System.
out.
println(content);//初始化的时候,给配置添加监听,配置变更会回调通知ConfigService.
addListener("${dataId}","${group}",newConfigChangeListener(){publicvoidreceiveConfigInfo(StringconfigInfo){//当配置更新后,通过该回调函数将最新值返回给用户.
//注意回调函数中不要做阻塞操作,否则阻塞通知线程.
config=configInfo;System.
out.
println(configInfo);}});/***如果配置值的內容为properties格式(key=value),可使用下面监听器.
以便一个配置管理多个配置项*//**ConfigService.
addListener("${dataId}","${group}",newPropertiesListener(){@OverridepublicvoidinnerReceive(Propertiesproperties){//TODOAuto-generatedmethodstubacmProperties=properties;System.
out.
println(properties);}});应用配置管理ACM开发指南3传参方式为了帮助您快速入门,示例代码采用了以代码初始化参数的方式.
但是实际生产中可能有不同环境(不同的账号、地域或命名空间),而参数因环境而异,需要通过变量传入.
为了方便您配置入参,并降低您的配置成本,ACM提供了多种传参方式.
注意:EDAS在发布环节自动为您注入,因此您无需采取任何操作.
**/}catch(ConfigExceptione){e.
printStackTrace();}//测试让主线程不退出,因为订阅配置是守护线程,主线程退出守护线程就会退出.
正式代码中无需下面代码while(true){try{Thread.
sleep(1000);}catch(InterruptedExceptione){e.
printStackTrace();}}}//通过get接口把配置值暴露出去使用publicstaticStringgetConfig(){returnconfig;}//通过get接口把配置值暴露出去使用publicstaticObjectgetPorpertiesValue(Stringkey){if(acmProperties!
=null){returnacmProperties.
get(key);}returnnull;}}初始化参数传参方法endpoint优先级由高到低JVM参数:-Daddress.
server.
domain=xxx1.
环境变量:address_server_domain=xxx2.
代码设置:如以上示例代码3.
namespace优先级由高到低JVM参数:-Dtenant.
id=xxx1.
代码设置:如以上示例代码2.
应用配置管理ACM开发指南4监听配置描述如果希望ACM推送配置变更,可以使用ACM动态监听配置接口来实现.
请求参数accessKey/secretKey优先级由高到低文件方式:accessKey和secretKey以Properties格式(满足publicvoidjava.
io.
Reader.
Properties.
load(Readerreader)方法)存储在-Dspas.
identity指定文件中.
如果不指定,则默认取/home/admin/.
spas_key/文件(应用名以-Dproject.
name指定)1.
环境变量:spas_accessKey=xxxspas_secretKey=xxx2.
代码设置:如以上示例代码3.
publicstaticvoidaddListener(StringdataId,ConfigChangeListenerAdapterlistener)参数名参数类型描述dataIdstring配置ID,采用类似package.
class(如com.
taobao.
tc.
refund.
log.
level)的命名规则保证全局唯一性,class部分建议是配置的业务含义.
全部字符小写.
只允许英文字符和4种特殊字符(".
"、不超过256字节.
groupstring配置分组,建议填写产品名:模块名(如ACM:Test)保证唯一性.
只允许英文字符和4种特殊字符"_"),不超过128字节.
应用配置管理ACM开发指南5返回值请求示例获取配置描述用于服务启动的时候从ACM获取配置.
请求参数listenerConfigChangeListener监听器,配置变更进入监听器的回调函数.
参数类型描述string配置值,初始化或者配置变更的时候通过回调函数返回该值.
//初始化配置服务,控制台通过示例代码自动获取下面参数ConfigService.
init("${endpoint}","${namespace}","${accessKey}","${secretKey}");//初始化的时候,给配置添加监听,配置变更会回调通知ConfigService.
addListener("${dataId}","${group}",newConfigChangeListener(){publicvoidreceiveConfigInfo(StringconfigInfo){//当配置更新后,通过该回调函数将最新值返回给用户System.
out.
println(configInfo);}});//测试让主线程不退出,因为订阅配置是守护线程,主线程退出守护线程就会退出.
正式代码中无需下面代码while(true){try{Thread.
sleep(1000);}catch(InterruptedExceptione){e.
printStackTrace();}}publicstaticStringgetConfig(StringdataId,Stringgroup,longtimeoutMs)throwsConfigException参数名参数类型描述应用配置管理ACM开发指南6返回值请求示例异常说明读取配置超时或网络异常,抛出ConfigException异常.
发布配置dataIdstring配置ID,采用类似package.
class(如com.
taobao.
tc.
refund.
log.
level)的命名规则保证全局唯一性,class部分建议是配置的业务含义.
全部字符小写.
只允许英文字符和4种特殊字符"_"),不超过256字节.
groupstring配置分组,建议填写产品名:模块名(如ACM:Test)保证唯一性,只允许英文字符和4种特殊字符("_"),不超过128字节.
timeoutstring读取配置超时时间,单位ms,推荐值3000.
参数类型描述string配置值try{//初始化配置服务,控制台通过示例代码自动获取下面参数ConfigService.
init("${endpoint}","${namespace}","${accessKey}","${secretKey}");//主动获取配置Stringcontent=ConfigService.
getConfig("${dataId}","${group}",3000);System.
out.
println(content);}catch(ConfigExceptione){//TODOAuto-generatedcatchblocke.
printStackTrace();}应用配置管理ACM开发指南7描述用于通过程序自动发布ACM配置,以便通过自动化手段降低运维成本.
注意:创建和修改配置时使用的同一个发布接口,当配置不存在时会创建配置,当配置已存在时会更新配置.
请求参数返回参数请求示例publicstaticbooleanpublishConfig(StringdataId,Stringgroup,Stringcontent)throwsConfigException参数名参数类型描述dataIdstring配置ID,采用类似package.
class(如com.
taobao.
tc.
refund.
log.
level)的命名规则保证全局唯一性.
建议根据配置的业务含义来定义class部分.
全部字符均为小写.
只允许英文字符和4种特殊字符("_"),不超过256字节.
groupstring配置分组,建议填写产品名:模块名(如ACM:Test)来保证唯一性.
只允许英文字符和4种特殊字符("、"_"),不超过128字节.
contentstring配置内容,不超过100K字节.
参数类型描述boolean是否发布成功try{//初始化配置服务,控制台通过示例代码自动获取下面参数ConfigService.
init("${endpoint}","${namespace}","${accessKey}","${secretKey}");//主动获取配置booleanisPublishOk=ConfigService.
publishConfig("${dataId}","${group}","${content}");System.
out.
println(isPublishOk);}catch(ConfigExceptione){//TODOAuto-generatedcatchblock应用配置管理ACM开发指南8异常说明读取配置超时或网络异常,抛出ConfigException异常.
删除配置描述用于通过程序自动删除ACM配置,以便通过自动化手段降低运维成本.
注意:当配置已存在时会删除该配置,当配置不存在时会直接返回成功消息.
请求参数返回参数请求示例e.
printStackTrace();}publicstaticbooleanremoveConfig(StringdataId,Stringgroup)throwsConfigException参数名参数类型描述dataIdstring配置IDgroupstring配置分组参数类型描述boolean是否删除成功try{//初始化配置服务,控制台通过示例代码自动获取下面参数ConfigService.
init("${endpoint}","${namespace}","${accessKey}","${secretKey}");//主动获取配置booleanisRemoveOk=ConfigService.
removeConfig("${dataId}","${group}");应用配置管理ACM开发指南9异常说明读取配置超时或网络异常,抛出ConfigException异常.
SpringCloudACM环境准备SpringCloudACMSDK的使用步骤如下.
增加Maven依赖.
配置应用名和应用组.
在SpringBoot应用中配置application.
properties,配置spring.
application.
group和spring.
application.
name:配置ACM环境和认证信息.
在SpringBoot应用中配置application.
properties,配置alibaba.
acm.
endpoint,alibaba.
acm.
namespace,alibaba.
acm.
accessKey和alibaba.
acm.
secretKey:System.
out.
println(isRemoveOk);}catch(ConfigExceptione){//TODOAuto-generatedcatchblocke.
printStackTrace();}com.
alibaba.
cloudspring-cloud-starter-acm1.
0.
5spring.
application.
group=com.
alibaba.
cloud.
acmspring.
application.
name=sample-app应用配置管理ACM开发指南10在ACM控制台添加应用配置.
前往ACM控制台,在相应的空间(namespace)下新建配置.
DataID按照如下约定格式编写:${spring.
application.
group}:${spring.
application.
name}.
properties例如:com.
alibaba.
cloud.
acm:sample-app.
properties配置格式选择TEXT,配置内容即为想要注入到应用中的具体key-value:配置注入使用SpringMVC注解注入配置,降低使用配置成本.
可以直接使用@Value注入配置:spring.
application.
group=com.
alibaba.
cloud.
acmspring.
application.
name=sample-appalibaba.
acm.
endpoint=xxxalibaba.
acm.
namespace=xxxalibaba.
acm.
accessKey=xxxalibaba.
acm.
secretKey=xxxuser.
id=001user.
name=juven2user.
age=88@ComponentclassSampleRunnerimplementsApplicationRunner{@Value("${user.
id}")StringuserId;@Value("${user.
name}")StringuserName;@Value("${user.
age}")intuserAge;@Override应用配置管理ACM开发指南11注意:如果同时在SpringBoot应用的application.
properties和ACM的${spring.
application.
group}:${spring.
application.
name}.
properties中配置了同一个key,ACM中的value会覆盖应用默认的value.
SpringBoot集成健康检查SpringCloudACM集成了SpringBoot的HealthCheck.
访问healthendpoint可以看到SpringBoot应用是否正确连接了ACM服务器:@RefreshScopeSpringCloudACM也支持SpringCloud的RefreshScope特性.
标记了@RefreshScope注解的Bean会自动监听ACM服务端的变更,并在运行时自动更新配置.
代码示例如下:publicvoidrun(ApplicationArgumentsargs){System.
out.
println(userId);System.
out.
println(userName);System.
out.
println(userAge);}}{"status":"UP","acm":{"status":"UP","dataIds":["com.
alibaba.
cloud.
acm:sample-app.
properties"]},"diskSpace":{"status":"UP","total":1000240963584,"free":858827423744,"threshold":10485760},"refreshScope":{"status":"UP"}}应用配置管理ACM开发指南12使用了@ConfigurationProperties注解的Bean默认就是RefreshScope的.
ACMEndpointSpringCloudACM内置了一个名为acm的endpoint,您可以通过访问SpringBoot应用management.
port(默认为8080)下的/acm访问,如:http://localhost:8080/acmACMNode.
jsSDK@RestController@RequestMapping("/sample")@RefreshScopeclassSampleController{@Value("${user.
name}")StringuserName;@RequestMapping("/acm")publicStringsimple(){return"HelloSpringCloudACM!
"+"Hello"+userName+"!
";}}{"runtime":{"sources":[{"dataId":"com.
alibaba.
cloud.
acm:sample-app.
properties","lastSynced":"2017-10-1010:46:27"}],"refreshHistory":[{"timestamp":"2017-10-1010:46:24","dataId":"com.
alibaba.
cloud.
acm:sample-app.
properties","md5":"8692ae986ec7bc345b3f0f4de602ff13"}]},"config":{"group":"DEFAULT_GROUP","timeOut":3000,"endpoit":"xxx","namespace":"xxx","accessKey":"xxx","secretKey":"xxx"}}应用配置管理ACM开发指南13安装ACMNode.
js版客户端ACMNode.
js版客户端主要用于帮助前端开发解决前后端独立发布,开发与运营独立问题,大幅提升开发效率.
输入以下命令安装客户端:示例代码在您的工程中运行以下代码进行配置管理.
ErrorEvents异常处理npmiacm-client--saveconstACMClient=require('acm-client');constco=require('co');constacm=newACMClient({endpoint:'acm.
aliyun.
com',//ACM控制台查看namespace:ACM控制台查看accessKey:ACM控制台查看secretKey:ACM控制台查看requestTimeout:6000,//请求超时时间,默认6s});//主动拉取配置co(function*(){constcontent=yieldacm.
getConfig('test','DEFAULT_GROUP');console.
log('getConfig=',content);});//监听数据更新acm.
subscribe({dataId:'test',group:'DEFAULT_GROUP',},content=>{console.
log(content);});acm.
on('error',function(err){//可以在这里统一进行日志的记录//如果不监听错误事件,所有的异常都将会打印到stderr});应用配置管理ACM开发指南14接口说明获取配置接口用于服务启动的时候从ACM获取配置.
请求参数返回值监听配置接口如果希望ACM推送配置变更,可以使用ACM动态监听配置接口来实现.
请求参数function*getConfig(dataId,group)参数名参数类型描述dataIdstring配置ID,采用类似package.
class(如com.
taobao.
tc.
refund.
log.
level)的命名规则保证全局唯一性,class部分建议是配置的业务含义.
全部字符小写.
只允许英文字符和4种特殊字符"_"),不超过256字节.
groupstring配置分组,建议填写产品名:模块名(如ACM:Test)保证唯一性,只允许英文字符和4种特殊字符("_"),不超过128字节.
参数类型描述string配置值functionsubscribe(info,listener)参数名参数类型描述infoObjectinfo.
dataId:配置ID.
info.
group:配置分组应用配置管理ACM开发指南15-取消配置监听接口用于服务启动的时候取消配置监听.
请求参数Node.
js项目链接https://www.
npmjs.
com/package/acm-client问题反馈@hustxiaocACMC++SDK本文介绍ACMC++SDK的使用方式.
注意:ACMC++SDK只支持Linux平台.
安装ACMC++SDK下载SDK依赖包:ACMC++SDK下载完成后进行解压,会有如下目录结构:listenerFunction监听器,配置变更进入监听器的回调函数.
functionunSubscribe(info,[listener])参数名参数类型描述infoObjectinfo.
dataId:配置ID.
info.
group:配置分组listenerFunction回调函数(可选,不传就移除所有监听函数).
应用配置管理ACM开发指南16------example/include/lib/上面的目录和文件的作用如下:example:acm.
cpp用于演示SDK使用.
Makefile用于example的编译和管理.
include:您自己编写的程序需要include的头文件.
lib:分别是64的静态库和动态库.
设置环境变量LD_LIBRARY_PATH,指定ACM动态库搜索路径,即安装的路径.
进入example目录,修改acm.
cpp文件的起始参数和配置的dataId、group.
执行make命令编译.
执行示例代码如下:示例代码在您的工程中运行以下代码进行配置管理.
exportLD_LIBRARY_PATH=/usr/lib64:/usr/lib:/lib:/lib64:.
.
/libcdexample//进入example目录vimacm.
cpp//修改acm.
cpp文件make//编译示例代码.
/acm//执行示例代码#include"ACM.
h"usingnamespacestd;usingnamespaceacm;//定义监听器classMyListener:publicManagerListener{public:MyListener(conststd::string&data_id,conststd::string&group):data_id_(data_id),group_(group){}virtual~MyListener(){}virtualvoidgetExecutor(){printf("data_id:%sgroup:%sgetExecutor\n",data_id_.
c_str(),group_.
c_str());}//配置变更时回调virtualvoidreceiveConfigInfo(std::string&configInfo){printf("data_id:%sgroup:%sconfigInfo:\n%s\n",data_id_.
c_str(),group_.
c_str(),configInfo.
c_str());config_=configInfo;}应用配置管理ACM开发指南17接口说明初始化设置接口设置endpoint,nameSpace,accessKey,secretKey.
各参数说明如下:private:std::stringdata_id_;std::stringgroup_;std::stringconfig_;};intmain(){ACM::init("acm.
aliyun.
com",//endpoint:ACM控制台查看namespace:ACM控制台查看accessKey:ACM控制台查看secretKey:ACM控制台查看//监听配置的dataId和groupstd::stringdataId="${dataId}";std::stringgroup="${group}";std::stringcontent;//主动拉取配置ACM::getConfig(dataId,group,5000,content);printf("getokconfig%s\n",content.
c_str());MyListener*listener=newMyListener(dataId,group);//监听配置变更ACM::addListener(dataId,group,listener);printf("addlistenerok%s%s\n",dataId.
c_str(),group.
c_str());do{printf("inputqtoquit\n");}while(getchar()!
='q');return0;}staticvoidinit(constchar*endpoint,constchar*nameSpace,char*accessKey,char*secretKey);参数名参数类型描述endpointconstchar*ACM域名,控制台获得nameSpaceconstchar*命名空间,控制台获得accessKeychar*accessKey,控制台获得secretKeychar*secretKey,控制台获得应用配置管理ACM开发指南18获取配置接口用于服务启动的时候从ACM获取配置.
参数说明见下表:监听配置接口如果希望ACM推送配置变更,可以使用ACM动态监听配置接口来实现.
参数说明见下表:staticboolgetConfig(conststd::string&dataId,conststd::string&group,inttimeoutMs,std::string&content);参数名参数类型描述dataIdconststring配置ID,采用类似package.
class(如com.
taobao.
tc.
refund.
log.
level)的命名规则保证全局唯一性,class部分建议是配置的业务含义.
全部字符小写.
只允许英文字符和4种特殊字符"_"),不超过256字节.
groupconststring配置分组,建议填写产品名:模块名(如ACM:Test)保证唯一性,只允许英文字符和4种特殊字符("_"),不超过128字节.
timeoutMsint超时时间contentstring返回的配置内容staticvoidaddListener(conststd::string&dataId,conststd::string&group,ManagerListener*listener);参数名参数类型描述dataIdconststringdataIdgroupconststringgrouplistenerManagerListener监听器,配置变更会执行监听器的回调函数.
应用配置管理ACM开发指南19取消配置监听接口用于服务启动的时候取消配置监听.
参数说明见下表:ACMPythonSDK为方便Python程序使用ACM管理应用配置,ACM提供了PythonSDK.
ACMPythonSDK现已开源,使用方法请参考Github.
API参考API简介您可以使用本文档介绍的API对应用配置服务进行相关操作.
目前提供配置查询接口和监听相关接口.
请确保在使用这些接口前,已充分了解ACM产品说明和使用协议.
调用方式staticvoidremoveListener(conststd::string&dataId,conststd::string&group,ManagerListener*listener);参数名参数类型描述dataIdconststringdataIdgroupconststringgrouplistenerManagerListener待取消的监听器应用配置管理ACM开发指南20请求结构本文介绍请求ACM服务的具体方法.
地址服务器地址服务器域名获取服务器IP列表通过地址服务器获取服务IP列表,以便后面能够通过服务IP发起请求.
如:通信协议支持通过HTTP进行请求通信.
请求方法支持HTTPGET或POST方法发送请求,GET方式下请求参数需要包含在请求的URL中.
请求参数每个请求都需要包含公共的鉴权、签名相关请求参数和相关操作所特有的请求参数.
地域地址服务器域名公网(测试)acm.
aliyun.
com华东1(杭州)addr-hz-internal.
edas.
aliyun.
com华北1(青岛)addr-qd-internal.
edas.
aliyun.
com华东2(上海)addr-sh-internal.
edas.
aliyun.
com华北2(北京)addr-bj-internal.
edas.
aliyun.
com华南1(深圳)addr-sz-internal.
edas.
aliyun.
comhttp://${地址服务器域名}:8080/diamond-server/diamondcurlhttp://acm.
aliyun.
com:8080/diamond-server/diamond139.
196.
135.
144应用配置管理ACM开发指南21字符编码请求及返回结果都使用GBK字符集进行编码.
签名机制ACM服务会对每个访问的请求进行身份验证,使用HTTP需要在请求中包含签名(Signature)信息.
ACM通过使用AccessKey和SecretKey进行对称加密的方法来验证请求的发送者身份.
AccessKey和SecretKey由ACM颁发给访问者,其中AccessKey用于标识访问者的身份;SecretKey是用于加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密,只有ACM和用户知道.
签名算法签名采用HmacSHA1算法,以下是Java版签名算法参考和Shell算法参考.
Java签名算法参考Shell签名算法publicstaticvoidmain(String[]args)throwsException{Stringtenant="tenant";Stringgroup="group";StringtimeStamp=String.
valueOf(System.
currentTimeMillis());Stringabc=HmacSHA1Encrypt(tenant+"+"+group+"+"+timeStamp,"1234");System.
out.
println(abc);}publicstaticStringHmacSHA1Encrypt(StringencryptText,StringencryptKey)throwsException{byte[]data=encryptKey.
getBytes("UTF-8");//根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称SecretKeysecretKey=newSecretKeySpec(data,"HmacSHA1");//生成一个指定Mac算法的Mac对象Macmac=Mac.
getInstance("HmacSHA1");//用给定密钥初始化Mac对象mac.
init(secretKey);byte[]text=encryptText.
getBytes("UTF-8");byte[]textFinal=mac.
doFinal(text);//完成Mac操作,base64编码,将byte数组转换为字符串returnnewString(Base64.
encodeBase64(textFinal));}##configsigntimestamp=`echo$[$(date+%s%N)/1000000]`signStr=$namespace+$group+$timestampsignContent=`echo-n$signStr|openssldgst-hmac$sk-sha1-binary|base64`echo$signContent应用配置管理ACM开发指南22签名处理步骤使用请求参数构造规范化的请求字符串(QueryParam).
使用上一步构造的规范化字符串按照下面的规则构造用于计算签名的字符串.
QueryParam不同的请求会不同.
按照RFC2104的定义,使用上面的用于签名的字符串计算签名HMAC值.
注意:计算签名时使用的Key就是用户持有的AccessKeySecret(ASCII:38),使用的哈希算法是SHA1.
按照Base64编码规则把上面的HMAC值编码成字符串,即得到签名值(Signature).
将得到的签名值作为Signature参数添加到请求参数中,即完成对请求签名的过程.
示例代码下面以Shell为例介绍一下如何构造ACM请求Signature=HMAC-SHA1(QueryParam)#!
/bin/bash##configparamdataId="xxx"group="xxx"namespace="xxx"accessKey="xxx"secretKey="xxx"endpoint="xxx"##configparamend##getserverIpfromaddressserverserverIp=`curl$endpoint:8080/diamond-server/diamond-s|awk'{a[NR]=$0}END{srand();i=int(rand()*NR+1);printa[i]}'`##configsigntimestamp=`echo$[$(date+%s%N)/1000000]`signStr=$namespace+$group+$timestampsignContent=`echo-n$signStr|openssldgst-hmac$secretKey-sha1-binary|base64`##requesttogetaconfigcurl-H"Spas-AccessKey:"$accessKey-H"timeStamp:"$timestamp-H"Spas-Signature:"$signContent"http://"$serverIp":8080/diamond-server/config.
codataId="$dataId"&group="$group"&tenant="$namespace-v应用配置管理ACM开发指南23获取配置描述获取ACM上的配置.
请求类型GET请求URL/diamond-server/config.
co请求参数Header参数名称类型是否必须描述tenantstring是租户信息,对应ACM的命名空间字段.
dataIdstring是配置ID.
groupstring是配置分组.
名称类型是否必须描述Spas-AccessKeystring是accessKey从ACM控制台获取.
timeStampstring是请求时间毫秒字符串.
Spas-Signaturestring是SpasSigner.
sign(Tenant+group+timeStamp,secretKey)//用秘钥对租户+分组+时间戳进行签名,签名算法为HmacSHA1.
加时间戳签名防止重放攻击,该签名有效期60s.
应用配置管理ACM开发指南24返回参数错误编码示例请求示例返回示例获取命名空间的配置本文介绍了如何获取命名空间的配置.
描述获取ACM上命名空间的配置.
参数类型描述string配置值错误代码描述语义400BadRequest客户端请求中的语法错误403Forbidden没有权限404NotFound客户端错误,未找到500InternalServerError服务器内部错误200OK正常http:serverIp:8080/diamond-server/config.
codataId=dataIdparam&group=groupParam&tenant=tenantParamcontentTest应用配置管理ACM开发指南25请求类型GET请求URL/diamond-server/basestone.
domethod=getAllConfigByTenant请求参数Header参数返回参数名称类型是否必须描述tenantstring是租户信息,对应ACM的命名空间字段pageNoint是分页页号pageSizeint是分页大小名称类型是否必须描述Spas-AccessKeystring是accessKey从ACM控制台获取.
timeStampstring是请求时间毫秒字符串.
Spas-Signaturestring是SpasSigner.
sign(Tenant+timeStamp,secretKey)//用密钥为"租户+时间戳"签名,签名算法为HmacSHA1.
加时间戳签名可防止重放攻击,签名有效期为60秒.
参数类型描述totalCount总配置数pageNumber分页页号pagesAvailable可用分页数pageItems配置元素应用配置管理ACM开发指南26错误编码示例请求示例返回示例监听配置描述监听ACM上的配置,以便实时感知配置变更.
如果配置变更,则用获取配置接口获取配置的最新值,动态刷新本地缓存.
注册监听采用的是异步Servlet技术.
注册监听本质就是带着配置和配置值的MD5值和后台对比.
如果MD5值不一致,就立即返回不一致的配置.
如果值一致,就等待住30秒.
返回值为空.
请求类型错误代码描述语义400BadRequest客户端请求中的语法错误403Forbidden没有权限404NotFound客户端错误,未找到500InternalServerError服务器内部错误200OK正常http:serverIp:8080/diamond-server/basestone.
domethod=getAllConfigByTenant&tenant=tenantParam&pageNumber=pageNumberParam&pageSize=pageSizeParamcontentTest应用配置管理ACM开发指南27POST请求URL/diamond-server/config.
co请求参数Header参数名称类型是否必须描述Probe-Modify-Requeststring是监听数据报文.
格式为dataId^2group^2contentMD5^2tenant^1.
dataId:配置ID-group:配置分组-contentMD5:配置内容MD5值-tenant:租户信息,对应ACM的命名空间字段-名称类型是否必须描述longPullingTimeoutstring是长轮训等待30s,此处填写30000.
Spas-AccessKeystring是accessKey从ACM控制台获取.
timeStampstring是请求时间毫秒字符串.
Spas-Signaturestring是SpasSigner.
sign(Probe-Modify-RequestContent,secretKey)//用秘钥对租户+分组+时间戳进行签名,签名算法为HmacSHA1.
加时间戳签名防止重放攻击应用配置管理ACM开发指南28-----参数说明配置多个字段间分隔符:^2=Character.
toString((char)2配置间分隔符:^1=Character.
toString((char)1)contentMD5:MD5(content),第一次本地缓存为空,所以这块为空串返回参数错误编码示例请求示例返回示例,该签名有效期60s.
参数类型描述string配置值错误代码描述语义400BadRequest客户端请求中的语法错误403Forbidden没有权限404NotFound客户端错误,未找到500InternalServerError服务器内部错误200OK正常http://serverIp:8080/diamond-server/config.
coPOST请求体数据内容:Probe-Modify-Request=dataId^2group^2contentMD5^2tenant^1如果配置变化dataId^2group^2tenant^1如果配置无变化:会返回空串应用配置管理ACM开发指南29发布配置描述发布ACM上的配置.
请求类型POST请求URL/diamond-server/basestone.
do请求参数Header参数名称类型是否必须描述tenantstring是租户信息,对应ACM的命名空间字段dataIdstring是配置IDgroupstring是配置分组contentstring是配置内容名称类型是否必须描述Spas-AccessKeystring是accessKey从ACM控制台获取.
timeStampstring是请求时间毫秒字符串.
Spas-Signaturestring是SpasSigner.
sign(Tenant+group+timeStamp,secretKey)//用密钥为"租户+分组+时间戳"签名,签名算法为HmacSHA1.
加时间应用配置管理ACM开发指南30返回参数错误编码示例请求示例返回示例删除配置戳签名可防止重放攻击,签名有效期为60秒.
参数类型描述boolean是否发布成功错误代码描述语义400BadRequest客户端请求中的语法错误403Forbidden没有权限404NotFound客户端错误,未找到500InternalServerError服务器内部错误200OK正常http:serverIp:8080/diamond-server/basestone.
domethod=syncUpdateAllhttpbody:dataId=dataIdparam&group=groupParam&tenant=tenantParam&content=contentParamtrue应用配置管理ACM开发指南31描述删除ACM上的配置.
请求类型POST请求URL/diamond-server/datum.
do请求参数Header参数返回参数名称类型是否必须描述tenantstring是租户信息,对应ACM的命名空间字段dataIdstring是配置IDgroupstring是配置分组名称类型是否必须描述Spas-AccessKeystring是accessKey从ACM控制台获取.
timeStampstring是请求时间毫秒字符串.
Spas-Signaturestring是SpasSigner.
sign(Tenant+group+timeStamp,secretKey)//用密钥为"租户+分组+时间戳"签名,签名算法为HmacSHA1.
加时间戳签名可防止重放攻击,签名有效期为60秒.
参数类型描述应用配置管理ACM开发指南32错误编码示例请求示例返回示例CLI参考ACM提供了命令行工具,方便您快速获取、推送、批量导入和导出配置数据.
安装方法命令行工具随ACMPythonSDK一起安装.
安装方法请参考ACMPythonSDK用户指南.
安装完毕后,可使用acm-h命令获得帮助.
boolean是否删除成功错误代码描述语义400BadRequest客户端请求中的语法错误403Forbidden没有权限404NotFound客户端错误,未找到500InternalServerError服务器内部错误200OK正常http:serverIp:8080/diamond-server/datum.
domethod=deleteAllDatumshttpbody:dataId=dataIdparam&group=groupParamtrue应用配置管理ACM开发指南33--命令参考管理类命令acmadd添加一个命名空间,参数格式为endpoint:namespace_id.
默认endpoint为acm.
aliyun.
com,默认端口为8080.
可使用-ak、-sk、-n参数来分别指定该命名空间的ak、sk和别名.
注意:若命名空间已存在,则add命令将被视为更新该命名空间.
acmuse切换当前命名空间.
可使用endpoint:namespace_id或别名.
acmcurrent查看当前命名空间.
acmshow查看所有命名空间.
数据操作类命令以下命令默认作用于当前命名空间.
也可使用-n参数传入endpoint:namespace_id或别名来指定要操作的命名空间.
acmpull获取一个配置项并打印到控制台,参数为group/data_id(对于默认group可只填写data_id).
acmpush推送一个配置项,参数为group/data_id(对于默认group可只填写data_id).
默认将从标准输入流中读取内容(可使用管道命令),也可以使用-f参数指定输入文件.
文件的优先级高,不可同时为空.
acmexport将命名空间下的所有配置导出到本地,导出的文件遵循group/data_id的目录结构,默认导出到名为endpoint-namespace_id.
zip的压缩文件中.
可使用-f指定导出文件名,使用-d指定导出目录.
在使用目录的条件下,可使用--delete参数来删除本地的多余配置文件(隐藏文件和目录会被忽略),目录优先级高于文件.
如果本地配置文件多于服务器配置,并指定了--delete参数,则导出前会询问是否删除文件,可使用--force跳过询问.
应用配置管理ACM开发指南34--acmimport将本地配置文件导入到命名空间,导入的文件需要遵循group/data_id的目录结构,默认将从名为endpoint-namespace_id.
zip的压缩文件中读取数据.
可使用-f指定源文件名,使用-d指定源目录,使用--delete参数来删除服务端的多余配置文件(隐藏文件和目录会被忽略),目录优先级高于文件.
如果服务器配置项多于本地文件,并指定了--delete参数,则导入前会询问是否删除服务器端配置,可使用--force跳过询问.
应用配置管理ACM开发指南35

Hostodo(年付12美元)斯波坎VPS六六折,美国西海岸机房

Hostodo是一家成立于2014年的国外VPS主机商,现在主要提供基于KVM架构的VPS主机,美国三个地区机房:拉斯维加斯、迈阿密和斯波坎,采用NVMe或者SSD磁盘,支持支付宝、PayPal、加密货币等付款方式。商家最近对于上架不久的斯波坎机房SSD硬盘VPS主机提供66折优惠码,适用于1GB或者以上内存套餐年付,最低每年12美元起。下面列出几款套餐配置信息。CPU:1core内存:256MB...

Sharktech:无限流量服务器丹佛,洛杉矶,荷兰$49/月起,1Gbps带宽哦!

鲨鱼机房(Sharktech)我们也叫它SK机房,是一家成立于2003年的老牌国外主机商,提供的产品包括独立服务器租用、VPS主机等,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹等,主打高防产品,独立服务器免费提供60Gbps/48Mpps攻击防御。机房提供1-10Gbps带宽不限流量服务器,最低丹佛/荷兰机房每月49美元起,洛杉矶机房最低59美元/月起。下面列出部分促销机型的配置信息。机房...

腾讯云CVM云服务器大硬盘方案400GB和800GB数据盘方案

最近看到群里的不少网友在搭建大数据内容网站,内容量有百万篇幅,包括图片可能有超过50GB,如果一台服务器有需要多个站点的话,那肯定默认的服务器50GB存储空间是不够用的。如果单独在购买数据盘会成本提高不少。这里我们看到腾讯云促销活动中有2款带大数据盘的套餐还是比较实惠的,一台是400GB数据盘,一台是800GB数据盘,适合他们的大数据网站。 直达链接 - 腾讯云 大数据盘套餐服务器这里我们看到当前...

403forbidden怎么解决为你推荐
同ip网站查询同ip地址站点查询 我本地怎么查询不了刘祚天DJ这个职业怎么样?网站检测请问,对网站进行监控检测的工具有哪些?www.haole012.comhttp://fj.qq.com/news/wm/wm012.htm 这个链接的视频的 第3分20秒开始的 背景音乐 是什么?抓站工具仿站必备软件有哪些工具?最好好用的仿站工具是那个几个?sesehu.comwww.hu338.com 怎么看不到啊www4399com4399是什么网站啊???hao.rising.cn如何解除瑞星主页锁定(hao.rising.cn). 不想用瑞星安全助手hao.rising.cn我一打开网页就是瑞星安全网站导航,怎么修改?bk乐乐BK乐乐和沈珂什么关系?
重庆vps租用 阿里云邮箱登陆首页 联通c套餐 冰山互联 payoneer 512m lamp配置 建站代码 天翼云盘 免费个人主页 卡巴斯基试用版下载 rewritecond 镇江高防服务器 godaddy退款 let kosskeb79 新浪轻博客 web服务器软件下载 双宿主机防火墙 更多