[#13445] Maintainer Client support aliyun ram auth plugin. (#13456)
PUSH-CI / Build dist tar (push) Waiting to run Details
PUSH-CI / Docker images (centos, 17) (push) Blocked by required conditions Details
PUSH-CI / Deploy nacos (push) Blocked by required conditions Details
PUSH-CI / Java e2e Test (push) Blocked by required conditions Details
PUSH-CI / GO E2E Test (push) Blocked by required conditions Details
PUSH-CI / Cpp E2E Test (push) Blocked by required conditions Details
PUSH-CI / Csharp E2E Test (push) Blocked by required conditions Details
PUSH-CI / Nodejs E2E Test (push) Blocked by required conditions Details
PUSH-CI / Python E2E Test (push) Blocked by required conditions Details
PUSH-CI / Clean (push) Blocked by required conditions Details
Continuous Integration / ci (17, ubuntu-latest) (push) Has been cancelled Details

* Fix naming maintainer sdk auth plugin.

* Fix config maintainer sdk auth plugin.

* Add AI builder to RequestResource.

* Set empty string replace null resource for config module.

* Set empty string replace null resource for naming module.

* Fix NPE for mcp create remote mcp server.

* Support ai mcp request aliyun ram auth.
This commit is contained in:
杨翊 SionYang 2025-06-03 13:55:31 +08:00 committed by GitHub
parent 4b325c5814
commit c5aebb0246
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 321 additions and 113 deletions

View File

@ -20,6 +20,7 @@ import com.alibaba.nacos.api.PropertyKeyConst;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.client.auth.ram.identify.StsConfig;
import com.alibaba.nacos.client.auth.ram.injector.AbstractResourceInjector;
import com.alibaba.nacos.client.auth.ram.injector.AiResourceInjector;
import com.alibaba.nacos.client.auth.ram.injector.ConfigResourceInjector;
import com.alibaba.nacos.client.auth.ram.injector.LockResourceInjector;
import com.alibaba.nacos.client.auth.ram.injector.NamingResourceInjector;
@ -56,6 +57,7 @@ public class RamClientAuthServiceImpl extends AbstractClientAuthService {
resourceInjectors.put(SignType.NAMING, new NamingResourceInjector());
resourceInjectors.put(SignType.CONFIG, new ConfigResourceInjector());
resourceInjectors.put(SignType.LOCK, new LockResourceInjector());
resourceInjectors.put(SignType.AI, new AiResourceInjector());
}
@Override

View File

@ -0,0 +1,69 @@
/*
* Copyright 1999-2025 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.nacos.client.auth.ram.injector;
import com.alibaba.nacos.client.auth.ram.RamConstants;
import com.alibaba.nacos.client.auth.ram.RamContext;
import com.alibaba.nacos.client.auth.ram.identify.IdentifyConstants;
import com.alibaba.nacos.client.auth.ram.identify.StsConfig;
import com.alibaba.nacos.client.auth.ram.identify.StsCredential;
import com.alibaba.nacos.client.auth.ram.identify.StsCredentialHolder;
import com.alibaba.nacos.client.auth.ram.utils.CalculateV4SigningKeyUtil;
import com.alibaba.nacos.client.auth.ram.utils.SpasAdapter;
import com.alibaba.nacos.common.utils.StringUtils;
import com.alibaba.nacos.plugin.auth.api.LoginIdentityContext;
import com.alibaba.nacos.plugin.auth.api.RequestResource;
import java.util.Map;
/**
* AI module aliyun ram reousce injector.
*
* @author xiweng.yy
*/
public class AiResourceInjector extends AbstractResourceInjector {
private static final String ACCESS_KEY_HEADER = "Spas-AccessKey";
@Override
public void doInject(RequestResource resource, RamContext context, LoginIdentityContext result) {
if (!context.validate()) {
return;
}
String accessKey = context.getAccessKey();
String secretKey = context.getSecretKey();
if (StsConfig.getInstance().isStsOn()) {
StsCredential stsCredential = StsCredentialHolder.getInstance().getStsCredential();
accessKey = stsCredential.getAccessKeyId();
secretKey = stsCredential.getAccessKeySecret();
result.setParameter(IdentifyConstants.SECURITY_TOKEN_HEADER, stsCredential.getSecurityToken());
}
result.setParameter(ACCESS_KEY_HEADER, accessKey);
String signatureKey = secretKey;
if (StringUtils.isNotEmpty(context.getRegionId())) {
signatureKey = CalculateV4SigningKeyUtil.finalSigningKeyStringWithDefaultInfo(secretKey,
context.getRegionId());
result.setParameter(RamConstants.SIGNATURE_VERSION, RamConstants.V4);
}
Map<String, String> signHeaders = SpasAdapter.getSignHeaders(buildResourceString(resource), signatureKey);
result.setParameters(signHeaders);
}
private String buildResourceString(RequestResource resource) {
return resource.getNamespace() + "+" + resource.getGroup();
}
}

View File

@ -68,15 +68,14 @@ public class ConfigResourceInjector extends AbstractResourceInjector {
}
private String getResource(String tenant, String group) {
if (StringUtils.isNotBlank(tenant) && StringUtils.isNotBlank(group)) {
if (StringUtils.isBlank(tenant)) {
if (StringUtils.isBlank(group)) {
return DEFAULT_RESOURCE;
} else {
return group;
}
} else {
return tenant + "+" + group;
}
if (StringUtils.isNotBlank(group)) {
return group;
}
if (StringUtils.isNotBlank(tenant)) {
return tenant;
}
return DEFAULT_RESOURCE;
}
}

View File

@ -23,6 +23,7 @@ import com.alibaba.nacos.api.ai.model.mcp.McpServerDetailInfo;
import com.alibaba.nacos.api.ai.model.mcp.McpServerRemoteServiceConfig;
import com.alibaba.nacos.api.ai.model.mcp.McpToolSpecification;
import com.alibaba.nacos.api.ai.model.mcp.registry.ServerVersionDetail;
import com.alibaba.nacos.api.common.Constants;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.model.Page;
import com.alibaba.nacos.common.utils.StringUtils;
@ -69,7 +70,7 @@ public interface McpMaintainerService {
* @throws NacosException if fail to list mcp server
*/
default Page<McpServerBasicInfo> listMcpServer(String mcpName, int pageNo, int pageSize) throws NacosException {
return listMcpServer("public", mcpName, pageNo, pageSize);
return listMcpServer(Constants.DEFAULT_NAMESPACE_ID, mcpName, pageNo, pageSize);
}
/**
@ -105,7 +106,7 @@ public interface McpMaintainerService {
* @throws NacosException if fail to search mcp server
*/
default Page<McpServerBasicInfo> searchMcpServer(String mcpName, int pageNo, int pageSize) throws NacosException {
return searchMcpServer("public", mcpName, pageNo, pageSize);
return searchMcpServer(Constants.DEFAULT_NAMESPACE_ID, mcpName, pageNo, pageSize);
}
/**
@ -140,7 +141,7 @@ public interface McpMaintainerService {
* @throws NacosException if fail to get mcp server
*/
default McpServerDetailInfo getMcpServerDetail(String mcpName, String version) throws NacosException {
return getMcpServerDetail("public", mcpName, version);
return getMcpServerDetail(Constants.DEFAULT_NAMESPACE_ID, mcpName, version);
}
/**
@ -252,7 +253,7 @@ public interface McpMaintainerService {
*/
default boolean createRemoteMcpServer(String mcpName, String version, String protocol,
McpEndpointSpec endpointSpec) throws NacosException {
return createRemoteMcpServer(mcpName, version, protocol, null, endpointSpec);
return createRemoteMcpServer(mcpName, version, protocol, new McpServerRemoteServiceConfig(), endpointSpec);
}
/**
@ -368,7 +369,7 @@ public interface McpMaintainerService {
*/
default boolean createMcpServer(String mcpName, McpServerBasicInfo serverSpec, McpToolSpecification toolSpec,
McpEndpointSpec endpointSpec) throws NacosException {
return createMcpServer("public", mcpName, serverSpec, toolSpec, endpointSpec);
return createMcpServer(Constants.DEFAULT_NAMESPACE_ID, mcpName, serverSpec, toolSpec, endpointSpec);
}
/**
@ -400,7 +401,7 @@ public interface McpMaintainerService {
*/
default boolean updateMcpServer(String mcpName, boolean isLatest, McpServerBasicInfo serverSpec, McpToolSpecification toolSpec,
McpEndpointSpec endpointSpec) throws NacosException {
return updateMcpServer("public", mcpName, isLatest, serverSpec, toolSpec, endpointSpec);
return updateMcpServer(Constants.DEFAULT_NAMESPACE_ID, mcpName, isLatest, serverSpec, toolSpec, endpointSpec);
}
/**
@ -447,7 +448,7 @@ public interface McpMaintainerService {
* @throws NacosException if fail to delete mcp server.
*/
default boolean deleteMcpServer(String mcpName) throws NacosException {
return deleteMcpServer("public", mcpName);
return deleteMcpServer(Constants.DEFAULT_NAMESPACE_ID, mcpName);
}
/**

View File

@ -16,6 +16,7 @@
package com.alibaba.nacos.maintainer.client.ai;
import com.alibaba.nacos.api.ai.constant.AiConstants;
import com.alibaba.nacos.api.ai.model.mcp.McpEndpointSpec;
import com.alibaba.nacos.api.ai.model.mcp.McpServerBasicInfo;
import com.alibaba.nacos.api.ai.model.mcp.McpServerDetailInfo;
@ -27,10 +28,12 @@ import com.alibaba.nacos.api.model.v2.Result;
import com.alibaba.nacos.common.http.HttpRestResult;
import com.alibaba.nacos.common.utils.HttpMethod;
import com.alibaba.nacos.common.utils.JacksonUtils;
import com.alibaba.nacos.common.utils.StringUtils;
import com.alibaba.nacos.maintainer.client.constants.Constants;
import com.alibaba.nacos.maintainer.client.model.HttpRequest;
import com.alibaba.nacos.maintainer.client.remote.ClientHttpProxy;
import com.alibaba.nacos.maintainer.client.utils.ParamUtil;
import com.alibaba.nacos.plugin.auth.api.RequestResource;
import com.fasterxml.jackson.core.type.TypeReference;
import java.util.HashMap;
@ -46,37 +49,46 @@ public class NacosAiMaintainerServiceImpl implements AiMaintainerService {
private final ClientHttpProxy clientHttpProxy;
private static final String DEFAULT_NAMESPACE = "public";
public NacosAiMaintainerServiceImpl(Properties properties) throws NacosException {
this.clientHttpProxy = new ClientHttpProxy(properties);
ParamUtil.initSerialization();
}
@Override
public Page<McpServerBasicInfo> listMcpServer(String namespaceId, String mcpName, int pageNo, int pageSize) throws NacosException {
public Page<McpServerBasicInfo> listMcpServer(String namespaceId, String mcpName, int pageNo, int pageSize)
throws NacosException {
if (StringUtils.isBlank(namespaceId)) {
namespaceId = AiConstants.Mcp.MCP_DEFAULT_NAMESPACE;
}
Map<String, String> params = new HashMap<>(3);
params.put("pageNo", String.valueOf(pageNo));
params.put("pageSize", String.valueOf(pageSize));
params.put("search", "accurate");
params.put("mcpName", mcpName);
params.put("namespaceId", namespaceId);
return getMcpServerBasicInfoPage(params);
RequestResource resource = buildRequestResource(namespaceId, mcpName);
return getMcpServerBasicInfoPage(params, resource);
}
@Override
public Page<McpServerBasicInfo> searchMcpServer(String namespaceId, String mcpName, int pageNo, int pageSize) throws NacosException {
public Page<McpServerBasicInfo> searchMcpServer(String namespaceId, String mcpName, int pageNo, int pageSize)
throws NacosException {
if (StringUtils.isBlank(namespaceId)) {
namespaceId = AiConstants.Mcp.MCP_DEFAULT_NAMESPACE;
}
Map<String, String> params = new HashMap<>(4);
params.put("pageNo", String.valueOf(pageNo));
params.put("pageSize", String.valueOf(pageSize));
params.put("search", "blur");
params.put("mcpName", mcpName);
params.put("namespaceId", namespaceId);
return getMcpServerBasicInfoPage(params);
RequestResource resource = buildRequestResource(namespaceId, mcpName);
return getMcpServerBasicInfoPage(params, resource);
}
private Page<McpServerBasicInfo> getMcpServerBasicInfoPage(Map<String, String> params) throws NacosException {
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
private Page<McpServerBasicInfo> getMcpServerBasicInfoPage(Map<String, String> params, RequestResource resource)
throws NacosException {
HttpRequest httpRequest = buildHttpRequestBuilder(resource).setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.AI_MCP_ADMIN_PATH + "/list").setParamValue(params).build();
HttpRestResult<String> restResult = clientHttpProxy.executeSyncHttpRequest(httpRequest);
Result<Page<McpServerBasicInfo>> result = JacksonUtils.toObj(restResult.getData(),
@ -86,12 +98,17 @@ public class NacosAiMaintainerServiceImpl implements AiMaintainerService {
}
@Override
public McpServerDetailInfo getMcpServerDetail(String namespaceId, String mcpName, String version) throws NacosException {
public McpServerDetailInfo getMcpServerDetail(String namespaceId, String mcpName, String version)
throws NacosException {
if (StringUtils.isBlank(namespaceId)) {
namespaceId = AiConstants.Mcp.MCP_DEFAULT_NAMESPACE;
}
Map<String, String> params = new HashMap<>(1);
params.put("mcpName", mcpName);
params.put("version", version);
params.put("namespaceId", namespaceId);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
RequestResource resource = buildRequestResource(namespaceId, mcpName);
HttpRequest httpRequest = buildHttpRequestBuilder(resource).setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.AI_MCP_ADMIN_PATH).setParamValue(params).build();
HttpRestResult<String> restResult = clientHttpProxy.executeSyncHttpRequest(httpRequest);
Result<McpServerDetailInfo> result = JacksonUtils.toObj(restResult.getData(),
@ -99,13 +116,17 @@ public class NacosAiMaintainerServiceImpl implements AiMaintainerService {
});
return result.getData();
}
@Override
public boolean createMcpServer(String namespaceId, String mcpName, McpServerBasicInfo serverSpec, McpToolSpecification toolSpec,
McpEndpointSpec endpointSpec) throws NacosException {
public boolean createMcpServer(String namespaceId, String mcpName, McpServerBasicInfo serverSpec,
McpToolSpecification toolSpec, McpEndpointSpec endpointSpec) throws NacosException {
if (StringUtils.isBlank(namespaceId)) {
namespaceId = AiConstants.Mcp.MCP_DEFAULT_NAMESPACE;
}
Map<String, String> params = buildFullParameters(serverSpec, toolSpec, endpointSpec);
params.put("namespaceId", namespaceId);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.POST)
RequestResource resource = buildRequestResource(namespaceId, mcpName);
HttpRequest httpRequest = buildHttpRequestBuilder(resource).setHttpMethod(HttpMethod.POST)
.setPath(Constants.AdminApiPath.AI_MCP_ADMIN_PATH).setParamValue(params).build();
HttpRestResult<String> restResult = clientHttpProxy.executeSyncHttpRequest(httpRequest);
Result<String> result = JacksonUtils.toObj(restResult.getData(), new TypeReference<Result<String>>() {
@ -114,21 +135,25 @@ public class NacosAiMaintainerServiceImpl implements AiMaintainerService {
}
@Override
public boolean updateMcpServer(String namespaceId, String mcpName, boolean isLatest, McpServerBasicInfo serverSpec, McpToolSpecification toolSpec,
McpEndpointSpec endpointSpec) throws NacosException {
public boolean updateMcpServer(String namespaceId, String mcpName, boolean isLatest, McpServerBasicInfo serverSpec,
McpToolSpecification toolSpec, McpEndpointSpec endpointSpec) throws NacosException {
if (StringUtils.isBlank(namespaceId)) {
namespaceId = AiConstants.Mcp.MCP_DEFAULT_NAMESPACE;
}
Map<String, String> params = buildFullParameters(serverSpec, toolSpec, endpointSpec);
params.put("latest", String.valueOf(isLatest));
params.put("namespaceId", namespaceId);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.PUT)
RequestResource resource = buildRequestResource(namespaceId, mcpName);
HttpRequest httpRequest = buildHttpRequestBuilder(resource).setHttpMethod(HttpMethod.PUT)
.setPath(Constants.AdminApiPath.AI_MCP_ADMIN_PATH).setParamValue(params).build();
HttpRestResult<String> restResult = clientHttpProxy.executeSyncHttpRequest(httpRequest);
Result<String> result = JacksonUtils.toObj(restResult.getData(), new TypeReference<Result<String>>() {
});
return ErrorCode.SUCCESS.getCode().equals(result.getCode());
}
private Map<String, String> buildFullParameters(McpServerBasicInfo serverSpec,
McpToolSpecification toolSpec, McpEndpointSpec endpointSpec) {
private Map<String, String> buildFullParameters(McpServerBasicInfo serverSpec, McpToolSpecification toolSpec,
McpEndpointSpec endpointSpec) {
Map<String, String> params = new HashMap<>(4);
params.put("mcpName", serverSpec.getName());
params.put("serverSpecification", JacksonUtils.toJson(serverSpec));
@ -143,14 +168,30 @@ public class NacosAiMaintainerServiceImpl implements AiMaintainerService {
@Override
public boolean deleteMcpServer(String namespaceId, String mcpName) throws NacosException {
if (StringUtils.isBlank(namespaceId)) {
namespaceId = AiConstants.Mcp.MCP_DEFAULT_NAMESPACE;
}
Map<String, String> params = new HashMap<>(1);
params.put("mcpName", mcpName);
params.put("namespaceId", namespaceId);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.DELETE)
RequestResource resource = buildRequestResource(namespaceId, mcpName);
HttpRequest httpRequest = buildHttpRequestBuilder(resource).setHttpMethod(HttpMethod.DELETE)
.setPath(Constants.AdminApiPath.AI_MCP_ADMIN_PATH).setParamValue(params).build();
HttpRestResult<String> restResult = clientHttpProxy.executeSyncHttpRequest(httpRequest);
Result<String> result = JacksonUtils.toObj(restResult.getData(), new TypeReference<Result<String>>() {
});
return ErrorCode.SUCCESS.getCode().equals(result.getCode());
}
private RequestResource buildRequestResource(String namespaceId, String mcpName) {
RequestResource.Builder builder = RequestResource.aiBuilder();
builder.setNamespace(namespaceId);
builder.setGroup(com.alibaba.nacos.api.common.Constants.DEFAULT_GROUP);
builder.setResource(null == mcpName ? StringUtils.EMPTY : mcpName);
return builder.build();
}
private HttpRequest.Builder buildHttpRequestBuilder(RequestResource resource) {
return new HttpRequest.Builder().setResource(resource);
}
}

View File

@ -34,6 +34,7 @@ import com.alibaba.nacos.common.utils.StringUtils;
import com.alibaba.nacos.maintainer.client.constants.Constants;
import com.alibaba.nacos.maintainer.client.core.AbstractCoreMaintainerService;
import com.alibaba.nacos.maintainer.client.model.HttpRequest;
import com.alibaba.nacos.plugin.auth.api.RequestResource;
import com.fasterxml.jackson.core.type.TypeReference;
import java.util.Collections;
@ -59,7 +60,8 @@ public class NacosConfigMaintainerServiceImpl extends AbstractCoreMaintainerServ
params.put("dataId", dataId);
params.put("groupName", groupName);
params.put("namespaceId", namespaceId);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
RequestResource resource = buildRequestResource(namespaceId, groupName, dataId);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.CONFIG_ADMIN_PATH).setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<ConfigDetailInfo> result = JacksonUtils.toObj(httpRestResult.getData(),
@ -98,7 +100,8 @@ public class NacosConfigMaintainerServiceImpl extends AbstractCoreMaintainerServ
params.put("configTags", configTags);
params.put("desc", desc);
params.put("type", type);
HttpRequest.Builder builder = new HttpRequest.Builder().setHttpMethod(HttpMethod.POST)
RequestResource resource = buildRequestResource(namespaceId, groupName, dataId);
HttpRequest.Builder builder = buildRequestWithResource(resource).setHttpMethod(HttpMethod.POST)
.setPath(Constants.AdminApiPath.CONFIG_ADMIN_PATH).setParamValue(params);
if (StringUtils.isNotBlank(betaIps)) {
Map<String, String> headers = Collections.singletonMap("betaIps", betaIps);
@ -117,7 +120,8 @@ public class NacosConfigMaintainerServiceImpl extends AbstractCoreMaintainerServ
params.put("dataId", dataId);
params.put("groupName", groupName);
params.put("namespaceId", namespaceId);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.DELETE)
RequestResource resource = buildRequestResource(namespaceId, groupName, dataId);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.DELETE)
.setPath(Constants.AdminApiPath.CONFIG_ADMIN_PATH).setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<Boolean> result = JacksonUtils.toObj(httpRestResult.getData(), new TypeReference<Result<Boolean>>() {
@ -136,8 +140,7 @@ public class NacosConfigMaintainerServiceImpl extends AbstractCoreMaintainerServ
idStr.append(id);
}
params.put("ids", idStr.toString());
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.DELETE)
HttpRequest httpRequest = buildRequestWithResource().setHttpMethod(HttpMethod.DELETE)
.setPath(Constants.AdminApiPath.CONFIG_ADMIN_PATH + "/batch").setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<Boolean> result = JacksonUtils.toObj(httpRestResult.getData(), new TypeReference<Result<Boolean>>() {
@ -160,8 +163,8 @@ public class NacosConfigMaintainerServiceImpl extends AbstractCoreMaintainerServ
params.put("appName", appName);
params.put("pageNo", String.valueOf(pageNo));
params.put("pageSize", String.valueOf(pageSize));
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
RequestResource resource = buildRequestResource(namespaceId, groupName, dataId);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.CONFIG_ADMIN_PATH + "/list").setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<Page<ConfigBasicInfo>> result = JacksonUtils.toObj(httpRestResult.getData(),
@ -178,8 +181,8 @@ public class NacosConfigMaintainerServiceImpl extends AbstractCoreMaintainerServ
params.put("groupName", groupName);
params.put("namespaceId", namespaceId);
params.put("aggregation", String.valueOf(aggregation));
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
RequestResource resource = buildRequestResource(namespaceId, groupName, dataId);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.CONFIG_ADMIN_PATH + "/listener").setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<ConfigListenerInfo> result = JacksonUtils.toObj(httpRestResult.getData(),
@ -194,8 +197,8 @@ public class NacosConfigMaintainerServiceImpl extends AbstractCoreMaintainerServ
params.put("dataId", dataId);
params.put("groupName", groupName);
params.put("namespaceId", namespaceId);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.DELETE)
RequestResource resource = buildRequestResource(namespaceId, groupName, dataId);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.DELETE)
.setPath(Constants.AdminApiPath.CONFIG_ADMIN_PATH + "/beta").setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<Boolean> result = JacksonUtils.toObj(httpRestResult.getData(), new TypeReference<Result<Boolean>>() {
@ -209,8 +212,8 @@ public class NacosConfigMaintainerServiceImpl extends AbstractCoreMaintainerServ
params.put("dataId", dataId);
params.put("groupName", groupName);
params.put("namespaceId", namespaceId);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
RequestResource resource = buildRequestResource(namespaceId, groupName, dataId);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.CONFIG_ADMIN_PATH + "/beta").setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<ConfigGrayInfo> result = JacksonUtils.toObj(httpRestResult.getData(),
@ -226,8 +229,8 @@ public class NacosConfigMaintainerServiceImpl extends AbstractCoreMaintainerServ
params.put("namespaceId", namespaceId);
params.put("srcUser", srcUser);
params.put("policy", policy.toString());
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.POST)
RequestResource resource = buildRequestResource(namespaceId, StringUtils.EMPTY, StringUtils.EMPTY);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.POST)
.setPath(Constants.AdminApiPath.CONFIG_ADMIN_PATH + "/clone").setParamValue(params)
.setBody(JacksonUtils.toJson(cloneInfos)).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
@ -246,8 +249,8 @@ public class NacosConfigMaintainerServiceImpl extends AbstractCoreMaintainerServ
params.put("namespaceId", namespaceId);
params.put("pageNo", String.valueOf(pageNo));
params.put("pageSize", String.valueOf(pageSize));
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
RequestResource resource = buildRequestResource(namespaceId, groupName, dataId);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.CONFIG_HISTORY_ADMIN_PATH + "/list").setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<Page<ConfigHistoryBasicInfo>> result = JacksonUtils.toObj(httpRestResult.getData(),
@ -264,8 +267,8 @@ public class NacosConfigMaintainerServiceImpl extends AbstractCoreMaintainerServ
params.put("groupName", groupName);
params.put("namespaceId", namespaceId);
params.put("nid", String.valueOf(nid));
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
RequestResource resource = buildRequestResource(namespaceId, groupName, dataId);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.CONFIG_HISTORY_ADMIN_PATH).setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<ConfigHistoryDetailInfo> result = JacksonUtils.toObj(httpRestResult.getData(),
@ -282,8 +285,8 @@ public class NacosConfigMaintainerServiceImpl extends AbstractCoreMaintainerServ
params.put("groupName", groupName);
params.put("namespaceId", namespaceId);
params.put("id", String.valueOf(id));
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
RequestResource resource = buildRequestResource(namespaceId, groupName, dataId);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.CONFIG_HISTORY_ADMIN_PATH + "/previous").setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<ConfigHistoryDetailInfo> result = JacksonUtils.toObj(httpRestResult.getData(),
@ -296,8 +299,8 @@ public class NacosConfigMaintainerServiceImpl extends AbstractCoreMaintainerServ
public List<ConfigBasicInfo> getConfigListByNamespace(String namespaceId) throws NacosException {
Map<String, String> params = new HashMap<>(8);
params.put("namespaceId", namespaceId);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
RequestResource resource = buildRequestResource(namespaceId, StringUtils.EMPTY, StringUtils.EMPTY);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.CONFIG_HISTORY_ADMIN_PATH + "/configs").setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<List<ConfigBasicInfo>> result = JacksonUtils.toObj(httpRestResult.getData(),
@ -308,7 +311,7 @@ public class NacosConfigMaintainerServiceImpl extends AbstractCoreMaintainerServ
@Override
public String updateLocalCacheFromStore() throws NacosException {
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.POST)
HttpRequest httpRequest = buildRequestWithResource().setHttpMethod(HttpMethod.POST)
.setPath(Constants.AdminApiPath.CONFIG_OPS_ADMIN_PATH + "/localCache").build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<String> result = JacksonUtils.toObj(httpRestResult.getData(), new TypeReference<Result<String>>() {
@ -322,7 +325,7 @@ public class NacosConfigMaintainerServiceImpl extends AbstractCoreMaintainerServ
params.put("logName", logName);
params.put("logLevel", logLevel);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.PUT)
HttpRequest httpRequest = buildRequestWithResource().setHttpMethod(HttpMethod.PUT)
.setPath(Constants.AdminApiPath.CONFIG_OPS_ADMIN_PATH + "/log").setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<String> result = JacksonUtils.toObj(httpRestResult.getData(), new TypeReference<Result<String>>() {
@ -338,8 +341,8 @@ public class NacosConfigMaintainerServiceImpl extends AbstractCoreMaintainerServ
params.put("all", String.valueOf(all));
params.put("namespaceId", namespaceId);
params.put("aggregation", String.valueOf(aggregation));
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
RequestResource resource = buildRequestResource(namespaceId, StringUtils.EMPTY, StringUtils.EMPTY);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.CONFIG_LISTENER_ADMIN_PATH).setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<ConfigListenerInfo> result = JacksonUtils.toObj(httpRestResult.getData(),
@ -347,4 +350,21 @@ public class NacosConfigMaintainerServiceImpl extends AbstractCoreMaintainerServ
});
return result.getData();
}
private HttpRequest.Builder buildRequestWithResource() {
return new HttpRequest.Builder().setResource(
RequestResource.configBuilder().setGroup(StringUtils.EMPTY).build());
}
private HttpRequest.Builder buildRequestWithResource(RequestResource resource) {
return new HttpRequest.Builder().setResource(resource);
}
private RequestResource buildRequestResource(String namespaceId, String groupName, String dataId) {
RequestResource.Builder builder = RequestResource.configBuilder();
builder.setNamespace(namespaceId);
builder.setGroup(groupName);
builder.setResource(dataId);
return builder.build();
}
}

View File

@ -16,6 +16,8 @@
package com.alibaba.nacos.maintainer.client.model;
import com.alibaba.nacos.plugin.auth.api.RequestResource;
import java.util.HashMap;
import java.util.Map;
@ -36,13 +38,16 @@ public class HttpRequest {
private String body;
private RequestResource resource;
public HttpRequest(String httpMethod, String path, Map<String, String> headers, Map<String, String> paramValues,
String body) {
String body, RequestResource resource) {
this.httpMethod = httpMethod;
this.path = path;
this.headers = headers;
this.paramValues = paramValues;
this.body = body;
this.resource = resource;
}
public String getHttpMethod() {
@ -85,6 +90,14 @@ public class HttpRequest {
this.body = body;
}
public RequestResource getResource() {
return resource;
}
public void setResource(RequestResource resource) {
this.resource = resource;
}
public static class Builder {
private String httpMethod;
@ -97,6 +110,8 @@ public class HttpRequest {
private String body;
private RequestResource resource;
public Builder setHttpMethod(String httpMethod) {
this.httpMethod = httpMethod;
return this;
@ -122,8 +137,13 @@ public class HttpRequest {
return this;
}
public Builder setResource(RequestResource resource) {
this.resource = resource;
return this;
}
public HttpRequest build() {
return new HttpRequest(httpMethod, path, headers, paramValues, body);
return new HttpRequest(httpMethod, path, headers, paramValues, body, resource);
}
}
}

View File

@ -43,6 +43,7 @@ import com.alibaba.nacos.maintainer.client.constants.Constants;
import com.alibaba.nacos.maintainer.client.core.AbstractCoreMaintainerService;
import com.alibaba.nacos.maintainer.client.model.HttpRequest;
import com.alibaba.nacos.maintainer.client.utils.RequestUtil;
import com.alibaba.nacos.plugin.auth.api.RequestResource;
import com.fasterxml.jackson.core.type.TypeReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -71,7 +72,8 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
public String createService(Service service) throws NacosException {
service.validate();
Map<String, String> params = RequestUtil.toParameters(service);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.POST)
RequestResource resource = buildRequestResource(service);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.POST)
.setPath(Constants.AdminApiPath.NAMING_SERVICE_ADMIN_PATH).setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<String> result = JacksonUtils.toObj(httpRestResult.getData(), new TypeReference<Result<String>>() {
@ -83,7 +85,8 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
public String updateService(Service service) throws NacosException {
service.validate();
Map<String, String> params = RequestUtil.toParameters(service);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.PUT)
RequestResource resource = buildRequestResource(service);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.PUT)
.setPath(Constants.AdminApiPath.NAMING_SERVICE_ADMIN_PATH).setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<String> result = JacksonUtils.toObj(httpRestResult.getData(), new TypeReference<Result<String>>() {
@ -95,7 +98,8 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
public String removeService(Service service) throws NacosException {
service.validate();
Map<String, String> params = RequestUtil.toParameters(service);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.DELETE)
RequestResource resource = buildRequestResource(service);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.DELETE)
.setPath(Constants.AdminApiPath.NAMING_SERVICE_ADMIN_PATH).setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<String> result = JacksonUtils.toObj(httpRestResult.getData(), new TypeReference<Result<String>>() {
@ -107,7 +111,8 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
public ServiceDetailInfo getServiceDetail(Service service) throws NacosException {
service.validate();
Map<String, String> params = RequestUtil.toParameters(service);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
RequestResource resource = buildRequestResource(service);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.NAMING_SERVICE_ADMIN_PATH).setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<ServiceDetailInfo> result = JacksonUtils.toObj(httpRestResult.getData(),
@ -148,7 +153,8 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
params.put("ignoreEmptyService", String.valueOf(ignoreEmptyService));
params.put("pageNo", String.valueOf(pageNo));
params.put("pageSize", String.valueOf(pageSize));
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
RequestResource resource = buildRequestResource(namespaceId, null, null);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.NAMING_SERVICE_ADMIN_PATH + "/list").setParamValue(params).build();
return getClientHttpProxy().executeSyncHttpRequest(httpRequest);
}
@ -164,8 +170,8 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
params.put("pageNo", String.valueOf(pageNo));
params.put("pageSize", String.valueOf(pageSize));
params.put("aggregation", String.valueOf(aggregation));
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
RequestResource resource = buildRequestResource(service);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.NAMING_SERVICE_ADMIN_PATH + "/subscribers").setParamValue(params)
.build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
@ -175,7 +181,7 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
@Override
public List<String> listSelectorTypes() throws NacosException {
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
HttpRequest httpRequest = buildRequestWithResource().setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.NAMING_SERVICE_ADMIN_PATH + "/selector/types").build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
return JacksonUtils.toObj(httpRestResult.getData(), new TypeReference<List<String>>() {
@ -187,7 +193,7 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
Map<String, String> params = new HashMap<>(8);
params.put("onlyStatus", String.valueOf(onlyStatus));
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
HttpRequest httpRequest = buildRequestWithResource().setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.NAMING_OPS_ADMIN_PATH + "/metrics").setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<MetricsInfo> result = JacksonUtils.toObj(httpRestResult.getData(),
@ -202,7 +208,7 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
params.put("logName", logName);
params.put("logLevel", logLevel);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.PUT)
HttpRequest httpRequest = buildRequestWithResource().setHttpMethod(HttpMethod.PUT)
.setPath(Constants.AdminApiPath.NAMING_OPS_ADMIN_PATH + "/log").setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<String> result = JacksonUtils.toObj(httpRestResult.getData(), new TypeReference<Result<String>>() {
@ -226,7 +232,8 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
PreservedMetadataKeys.IP_DELETE_TIMEOUT);
}
Map<String, String> params = RequestUtil.toParameters(service, instance);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.POST)
RequestResource resource = buildRequestResource(service);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.POST)
.setPath(Constants.AdminApiPath.NAMING_INSTANCE_ADMIN_PATH).setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<String> result = JacksonUtils.toObj(httpRestResult.getData(), new TypeReference<Result<String>>() {
@ -248,7 +255,8 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
"If you want to de-register this ephemeral instance, please use the nacos-client which registered this instance.");
}
Map<String, String> params = RequestUtil.toParameters(service, instance);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.DELETE)
RequestResource resource = buildRequestResource(service);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.DELETE)
.setPath(Constants.AdminApiPath.NAMING_INSTANCE_ADMIN_PATH).setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<String> result = JacksonUtils.toObj(httpRestResult.getData(), new TypeReference<Result<String>>() {
@ -262,7 +270,8 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
instance.validate();
checkEphemeral(service, instance);
Map<String, String> params = RequestUtil.toParameters(service, instance);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.PUT)
RequestResource resource = buildRequestResource(service);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.PUT)
.setPath(Constants.AdminApiPath.NAMING_INSTANCE_ADMIN_PATH).setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<String> result = JacksonUtils.toObj(httpRestResult.getData(), new TypeReference<Result<String>>() {
@ -286,7 +295,8 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
}
checkEphemeral(service, instances.get(0));
Map<String, String> params = RequestUtil.toParameters(service, instances, newMetadata);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.PUT)
RequestResource resource = buildRequestResource(service);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.PUT)
.setPath(Constants.AdminApiPath.NAMING_INSTANCE_ADMIN_PATH + "/metadata/batch").setParamValue(params)
.build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
@ -312,7 +322,8 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
}
checkEphemeral(service, instances.get(0));
Map<String, String> params = RequestUtil.toParameters(service, instances, newMetadata);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.DELETE)
RequestResource resource = buildRequestResource(service);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.DELETE)
.setPath(Constants.AdminApiPath.NAMING_INSTANCE_ADMIN_PATH + "/metadata/batch").setParamValue(params)
.build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
@ -328,7 +339,8 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
instance.validate();
checkEphemeral(service, instance);
Map<String, String> params = RequestUtil.toParameters(service, instance);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.PUT)
RequestResource resource = buildRequestResource(service);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.PUT)
.setPath(Constants.AdminApiPath.NAMING_INSTANCE_ADMIN_PATH + "/partial").setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<String> result = JacksonUtils.toObj(httpRestResult.getData(), new TypeReference<Result<String>>() {
@ -349,7 +361,8 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
params.put("serviceName", service.getName());
params.put("clusterName", clusterName);
params.put("healthyOnly", String.valueOf(healthyOnly));
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
RequestResource resource = buildRequestResource(service);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.NAMING_INSTANCE_ADMIN_PATH + "/list").setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<List<Instance>> result = JacksonUtils.toObj(httpRestResult.getData(),
@ -363,7 +376,8 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
service.validate();
instance.validate();
Map<String, String> params = RequestUtil.toParameters(service, instance);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
RequestResource resource = buildRequestResource(service);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.NAMING_INSTANCE_ADMIN_PATH).setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<Instance> result = JacksonUtils.toObj(httpRestResult.getData(), new TypeReference<Result<Instance>>() {
@ -388,7 +402,8 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
LOGGER.warn("Only persistent instance with NONE health checker can be updated healthy statues.");
params.put("ephemeral", String.valueOf(Boolean.FALSE));
}
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.PUT)
RequestResource resource = buildRequestResource(service);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.PUT)
.setPath(Constants.AdminApiPath.NAMING_HEALTH_ADMIN_PATH + "/instance").setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
@ -399,7 +414,7 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
@Override
public Map<String, AbstractHealthChecker> getHealthCheckers() throws NacosException {
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
HttpRequest httpRequest = buildRequestWithResource().setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.NAMING_HEALTH_ADMIN_PATH + "/checkers").build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
return JacksonUtils.toObj(httpRestResult.getData(), new TypeReference<Map<String, AbstractHealthChecker>>() {
@ -411,7 +426,8 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
service.validate();
cluster.validate();
Map<String, String> params = RequestUtil.toParameters(service, cluster);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.PUT)
RequestResource resource = buildRequestResource(service);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.PUT)
.setPath(Constants.AdminApiPath.NAMING_CLUSTER_ADMIN_PATH).setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<String> result = JacksonUtils.toObj(httpRestResult.getData(), new TypeReference<Result<String>>() {
@ -421,7 +437,7 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
@Override
public List<String> getClientList() throws NacosException {
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
HttpRequest httpRequest = buildRequestWithResource().setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.NAMING_CLIENT_ADMIN_PATH + "/list").build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
return JacksonUtils.toObj(httpRestResult.getData(), new TypeReference<List<String>>() {
@ -432,7 +448,7 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
public ClientSummaryInfo getClientDetail(String clientId) throws NacosException {
Map<String, String> params = new HashMap<>(8);
params.put("clientId", clientId);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
HttpRequest httpRequest = buildRequestWithResource().setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.NAMING_CLIENT_ADMIN_PATH).setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
Result<ClientSummaryInfo> result = JacksonUtils.toObj(httpRestResult.getData(),
@ -446,7 +462,7 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
Map<String, String> params = new HashMap<>(8);
params.put("clientId", clientId);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
HttpRequest httpRequest = buildRequestWithResource().setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.NAMING_CLIENT_ADMIN_PATH + "/publish/list").setParamValue(params)
.build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
@ -461,7 +477,7 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
Map<String, String> params = new HashMap<>(8);
params.put("clientId", clientId);
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
HttpRequest httpRequest = buildRequestWithResource().setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.NAMING_CLIENT_ADMIN_PATH + "/subscribe/list").setParamValue(params)
.build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
@ -480,8 +496,8 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
params.put("serviceName", serviceName);
params.put("ip", ip);
params.put("port", String.valueOf(port));
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
RequestResource resource = buildRequestResource(namespaceId, groupName, serviceName);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.NAMING_CLIENT_ADMIN_PATH + "/service/publisher/list")
.setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
@ -500,8 +516,8 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
params.put("serviceName", serviceName);
params.put("ip", ip);
params.put("port", String.valueOf(port));
HttpRequest httpRequest = new HttpRequest.Builder().setHttpMethod(HttpMethod.GET)
RequestResource resource = buildRequestResource(namespaceId, groupName, serviceName);
HttpRequest httpRequest = buildRequestWithResource(resource).setHttpMethod(HttpMethod.GET)
.setPath(Constants.AdminApiPath.NAMING_CLIENT_ADMIN_PATH + "/service/subscriber/list")
.setParamValue(params).build();
HttpRestResult<String> httpRestResult = getClientHttpProxy().executeSyncHttpRequest(httpRequest);
@ -510,4 +526,25 @@ public class NacosNamingMaintainerServiceImpl extends AbstractCoreMaintainerServ
});
return result.getData();
}
private HttpRequest.Builder buildRequestWithResource() {
return new HttpRequest.Builder().setResource(
RequestResource.namingBuilder().setResource(StringUtils.EMPTY).build());
}
private HttpRequest.Builder buildRequestWithResource(RequestResource resource) {
return new HttpRequest.Builder().setResource(resource);
}
private RequestResource buildRequestResource(Service service) {
return buildRequestResource(service.getNamespaceId(), service.getGroupName(), service.getName());
}
private RequestResource buildRequestResource(String namespaceId, String groupName, String serviceName) {
RequestResource.Builder builder = RequestResource.namingBuilder();
builder.setNamespace(namespaceId);
builder.setGroup(groupName);
builder.setResource(serviceName);
return builder.build();
}
}

View File

@ -73,7 +73,7 @@ public class ClientHttpProxy implements Closeable {
public ClientHttpProxy(Properties properties) throws NacosException {
initServerListManager(properties);
initClientAuthService();
initClientAuthService(properties);
initScheduledExecutor(properties);
}
@ -82,9 +82,10 @@ public class ClientHttpProxy implements Closeable {
serverListManager.start();
}
private void initClientAuthService() {
private void initClientAuthService(Properties properties) {
clientAuthPluginManager = new ClientAuthPluginManager();
clientAuthPluginManager.init(serverListManager.getServerList(), nacosRestTemplate);
login(properties);
}
private void initScheduledExecutor(Properties properties) {
@ -166,7 +167,7 @@ public class ClientHttpProxy implements Closeable {
.setReadTimeOutMillis(Long.valueOf(readTimeoutMs).intValue())
.setConTimeOutMillis(Long.valueOf(connectTimeoutMs).intValue()).build();
Header httpHeaders = Header.newInstance();
addAuthHeader(httpHeaders);
addAuthHeader(httpHeaders, request.getResource());
if (headers != null) {
httpHeaders.addAll(headers);
}
@ -191,10 +192,10 @@ public class ClientHttpProxy implements Closeable {
}
}
private void addAuthHeader(Header header) {
private void addAuthHeader(Header header, RequestResource resource) {
clientAuthPluginManager.getAuthServiceSpiImplSet().forEach(clientAuthService -> {
LoginIdentityContext loginIdentityContext = clientAuthService.getLoginIdentityContext(
new RequestResource());
null == resource ? new RequestResource() : resource);
for (String key : loginIdentityContext.getAllKey()) {
header.addParam(key, loginIdentityContext.getParameter(key));
}

View File

@ -23,6 +23,7 @@ import com.alibaba.nacos.common.http.client.NacosRestTemplate;
import com.alibaba.nacos.maintainer.client.address.DefaultServerListManager;
import com.alibaba.nacos.maintainer.client.model.HttpRequest;
import com.alibaba.nacos.maintainer.client.utils.ParamUtil;
import com.alibaba.nacos.plugin.auth.api.RequestResource;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@ -45,6 +46,8 @@ import static org.mockito.Mockito.when;
public class ClientHttpProxyTest {
private static final RequestResource REQUEST_RESOURCE = new RequestResource();
private ClientHttpProxy clientHttpProxy;
private DefaultServerListManager mockServerListManager;
@ -90,7 +93,7 @@ public class ClientHttpProxyTest {
mockResult.setData("Success");
when(mockNacosRestTemplate.get(anyString(), any(), any(), any(), eq(String.class))).thenReturn(mockResult);
HttpRequest request = new HttpRequest("GET", "/test", new HashMap<>(), new HashMap<>(), null);
HttpRequest request = new HttpRequest("GET", "/test", new HashMap<>(), new HashMap<>(), null, REQUEST_RESOURCE);
HttpRestResult<String> result = clientHttpProxy.executeSyncHttpRequest(request);
@ -115,7 +118,7 @@ public class ClientHttpProxyTest {
when(mockNacosRestTemplate.get(anyString(), any(), any(), any(), eq(String.class))).thenReturn(
mockFailureResult).thenReturn(mockSuccessResult);
HttpRequest request = new HttpRequest("GET", "/test", new HashMap<>(), new HashMap<>(), null);
HttpRequest request = new HttpRequest("GET", "/test", new HashMap<>(), new HashMap<>(), null, REQUEST_RESOURCE);
HttpRestResult<String> result = clientHttpProxy.executeSyncHttpRequest(request);
@ -138,7 +141,7 @@ public class ClientHttpProxyTest {
when(mockNacosRestTemplate.get(anyString(), any(), any(), any(), eq(String.class))).thenThrow(
new RuntimeException("Mock")).thenReturn(mockSuccessResult);
HttpRequest request = new HttpRequest("GET", "/test", new HashMap<>(), new HashMap<>(), null);
HttpRequest request = new HttpRequest("GET", "/test", new HashMap<>(), new HashMap<>(), null, REQUEST_RESOURCE);
HttpRestResult<String> result = clientHttpProxy.executeSyncHttpRequest(request);
@ -157,7 +160,7 @@ public class ClientHttpProxyTest {
when(mockNacosRestTemplate.get(anyString(), any(), any(), any(), eq(String.class))).thenThrow(
new RuntimeException("Mock"));
HttpRequest request = new HttpRequest("GET", "/test", new HashMap<>(), new HashMap<>(), null);
HttpRequest request = new HttpRequest("GET", "/test", new HashMap<>(), new HashMap<>(), null, REQUEST_RESOURCE);
assertThrows(NacosException.class, () -> clientHttpProxy.executeSyncHttpRequest(request),
"No available server after 3 retries, last tried server: localhost:8848");
@ -175,7 +178,7 @@ public class ClientHttpProxyTest {
when(mockNacosRestTemplate.get(anyString(), any(), any(), any(), eq(String.class))).thenReturn(
mockFailureResult);
HttpRequest request = new HttpRequest("GET", "/test", new HashMap<>(), new HashMap<>(), null);
HttpRequest request = new HttpRequest("GET", "/test", new HashMap<>(), new HashMap<>(), null, REQUEST_RESOURCE);
Exception exception = assertThrows(NacosException.class, () -> {
clientHttpProxy.executeSyncHttpRequest(request);
@ -197,7 +200,7 @@ public class ClientHttpProxyTest {
when(mockNacosRestTemplate.get(anyString(), any(), any(), any(), eq(String.class))).thenReturn(
mockFailureResult);
HttpRequest request = new HttpRequest("GET", "/test", new HashMap<>(), new HashMap<>(), null);
HttpRequest request = new HttpRequest("GET", "/test", new HashMap<>(), new HashMap<>(), null, REQUEST_RESOURCE);
Exception exception = assertThrows(NacosException.class, () -> {
clientHttpProxy.executeSyncHttpRequest(request);
@ -222,7 +225,7 @@ public class ClientHttpProxyTest {
when(mockNacosRestTemplate.get(anyString(), any(), any(), any(), eq(String.class))).thenReturn(
mockFailureResult).thenReturn(mockSuccessResult);
HttpRequest request = new HttpRequest("GET", "/test", new HashMap<>(), new HashMap<>(), null);
HttpRequest request = new HttpRequest("GET", "/test", new HashMap<>(), new HashMap<>(), null, REQUEST_RESOURCE);
HttpRestResult<String> result = clientHttpProxy.executeSyncHttpRequest(request);
@ -241,7 +244,8 @@ public class ClientHttpProxyTest {
mockSuccessResult.setData("Success");
when(mockNacosRestTemplate.postJson(anyString(), any(), any(), any(), eq(String.class))).thenReturn(
mockSuccessResult);
HttpRequest request = new HttpRequest("POST", "/test", new HashMap<>(), new HashMap<>(), "{\"key\":\"test\"}");
HttpRequest request = new HttpRequest("POST", "/test", new HashMap<>(), new HashMap<>(), "{\"key\":\"test\"}",
REQUEST_RESOURCE);
HttpRestResult<String> result = clientHttpProxy.executeSyncHttpRequest(request);
assertNotNull(result);
assertEquals(200, result.getCode());
@ -256,7 +260,8 @@ public class ClientHttpProxyTest {
mockSuccessResult.setData("Success");
when(mockNacosRestTemplate.postForm(anyString(), any(HttpClientConfig.class), any(), any(),
eq(String.class))).thenReturn(mockSuccessResult);
HttpRequest request = new HttpRequest("POST", "/test", new HashMap<>(), new HashMap<>(), null);
HttpRequest request = new HttpRequest("POST", "/test", new HashMap<>(), new HashMap<>(), null,
REQUEST_RESOURCE);
HttpRestResult<String> result = clientHttpProxy.executeSyncHttpRequest(request);
assertNotNull(result);
assertEquals(200, result.getCode());
@ -271,7 +276,7 @@ public class ClientHttpProxyTest {
mockSuccessResult.setData("Success");
when(mockNacosRestTemplate.putForm(anyString(), any(HttpClientConfig.class), any(), any(),
eq(String.class))).thenReturn(mockSuccessResult);
HttpRequest request = new HttpRequest("PUT", "/test", new HashMap<>(), new HashMap<>(), null);
HttpRequest request = new HttpRequest("PUT", "/test", new HashMap<>(), new HashMap<>(), null, REQUEST_RESOURCE);
HttpRestResult<String> result = clientHttpProxy.executeSyncHttpRequest(request);
assertNotNull(result);
assertEquals(200, result.getCode());
@ -286,7 +291,8 @@ public class ClientHttpProxyTest {
mockSuccessResult.setData("Success");
when(mockNacosRestTemplate.delete(anyString(), any(HttpClientConfig.class), any(), any(),
eq(String.class))).thenReturn(mockSuccessResult);
HttpRequest request = new HttpRequest("DELETE", "/test", new HashMap<>(), new HashMap<>(), null);
HttpRequest request = new HttpRequest("DELETE", "/test", new HashMap<>(), new HashMap<>(), null,
REQUEST_RESOURCE);
HttpRestResult<String> result = clientHttpProxy.executeSyncHttpRequest(request);
assertNotNull(result);
assertEquals(200, result.getCode());
@ -296,7 +302,8 @@ public class ClientHttpProxyTest {
@Test
void testOtherHttpMethod() throws Exception {
when(mockServerListManager.getCurrentServer()).thenReturn("http://127.0.0.1:8848");
HttpRequest request = new HttpRequest("PATCH", "/test", new HashMap<>(), new HashMap<>(), null);
HttpRequest request = new HttpRequest("PATCH", "/test", new HashMap<>(), new HashMap<>(), null,
REQUEST_RESOURCE);
assertThrows(NacosException.class, () -> clientHttpProxy.executeSyncHttpRequest(request));
}

View File

@ -105,6 +105,17 @@ public class RequestResource {
return result;
}
/**
* Create new AI request resource builder.
*
* @return ai request resource builder
*/
public static Builder aiBuilder() {
Builder result = new Builder();
result.setType(SignType.AI);
return result;
}
public static class Builder {
private String type;