diff --git a/core/src/main/java/com/alibaba/nacos/core/utils/WebUtils.java b/core/src/main/java/com/alibaba/nacos/core/utils/WebUtils.java index 4f5d2d2b6b8..5fd037340c0 100644 --- a/core/src/main/java/com/alibaba/nacos/core/utils/WebUtils.java +++ b/core/src/main/java/com/alibaba/nacos/core/utils/WebUtils.java @@ -15,6 +15,7 @@ */ package com.alibaba.nacos.core.utils; +import com.alibaba.nacos.common.constant.HttpHeaderConsts; import org.apache.commons.lang3.StringUtils; import javax.servlet.http.HttpServletRequest; @@ -71,4 +72,20 @@ public static String getAcceptEncoding(HttpServletRequest req) { encode = encode.contains(",") ? encode.substring(0, encode.indexOf(",")) : encode; return encode.contains(";") ? encode.substring(0, encode.indexOf(";")) : encode; } + + /** + * Returns the value of the request header "user-agent" as a String. + * + * @param request HttpServletRequest + * @return the value of the request header "user-agent", or the value of the + * request header "client-version" if the request does not have a + * header of "user-agent" + */ + public static String getUserAgent(HttpServletRequest request) { + String userAgent = request.getHeader(HttpHeaderConsts.USER_AGENT_HEADER); + if (StringUtils.isEmpty(userAgent)) { + userAgent = StringUtils.defaultIfEmpty(request.getHeader(HttpHeaderConsts.CLIENT_VERSION_HEADER), StringUtils.EMPTY); + } + return userAgent; + } } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/acl/AuthChecker.java b/naming/src/main/java/com/alibaba/nacos/naming/acl/AuthChecker.java index 9e075162903..aa863732b98 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/acl/AuthChecker.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/acl/AuthChecker.java @@ -17,7 +17,6 @@ import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.naming.CommonParams; -import com.alibaba.nacos.common.constant.HttpHeaderConsts; import com.alibaba.nacos.core.utils.WebUtils; import com.alibaba.nacos.naming.core.Service; import com.alibaba.nacos.naming.core.ServiceManager; @@ -53,7 +52,7 @@ public void doRaftAuth(HttpServletRequest req) throws Exception { return; } - String agent = req.getHeader(HttpHeaderConsts.USER_AGENT_HEADER); + String agent = WebUtils.getUserAgent(req); if (StringUtils.startsWith(agent, UtilsAndCommons.NACOS_SERVER_HEADER)) { return; } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/controllers/ApiController.java b/naming/src/main/java/com/alibaba/nacos/naming/controllers/ApiController.java index 30c5fb1e195..98ea7724f17 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/controllers/ApiController.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/controllers/ApiController.java @@ -19,7 +19,6 @@ import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.naming.CommonParams; import com.alibaba.nacos.api.naming.utils.NamingUtils; -import com.alibaba.nacos.common.constant.HttpHeaderConsts; import com.alibaba.nacos.core.utils.WebUtils; import com.alibaba.nacos.naming.core.DistroMapper; import com.alibaba.nacos.naming.core.ServiceManager; @@ -62,7 +61,7 @@ public JSONObject allDomNames(HttpServletRequest request) throws Exception { JSONObject result = new JSONObject(); // For old DNS-F client: String dnsfVersion = "1.0.1"; - String agent = request.getHeader(HttpHeaderConsts.USER_AGENT_HEADER); + String agent = WebUtils.getUserAgent(request); ClientInfo clientInfo = new ClientInfo(agent); if (clientInfo.type == ClientInfo.ClientType.DNS && clientInfo.version.compareTo(VersionUtil.parseVersion(dnsfVersion)) <= 0) { @@ -123,7 +122,7 @@ public JSONObject srvIPXT(HttpServletRequest request) throws Exception { Constants.DEFAULT_NAMESPACE_ID); String dom = WebUtils.required(request, "dom"); - String agent = request.getHeader(HttpHeaderConsts.USER_AGENT_HEADER); + String agent = WebUtils.getUserAgent(request); String clusters = WebUtils.optional(request, "clusters", StringUtils.EMPTY); String clientIP = WebUtils.optional(request, "clientIP", StringUtils.EMPTY); Integer udpPort = Integer.parseInt(WebUtils.optional(request, "udpPort", "0")); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/controllers/InstanceController.java b/naming/src/main/java/com/alibaba/nacos/naming/controllers/InstanceController.java index e6746b28d9a..f3f1ebb2188 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/controllers/InstanceController.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/controllers/InstanceController.java @@ -21,7 +21,6 @@ import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.naming.CommonParams; import com.alibaba.nacos.api.naming.utils.NamingUtils; -import com.alibaba.nacos.common.constant.HttpHeaderConsts; import com.alibaba.nacos.core.utils.WebUtils; import com.alibaba.nacos.naming.core.DistroMapper; import com.alibaba.nacos.naming.core.Instance; @@ -127,7 +126,7 @@ public String update(HttpServletRequest request) throws Exception { String serviceName = WebUtils.required(request, CommonParams.SERVICE_NAME); String namespaceId = WebUtils.optional(request, CommonParams.NAMESPACE_ID, Constants.DEFAULT_NAMESPACE_ID); - String agent = request.getHeader(HttpHeaderConsts.USER_AGENT_HEADER); + String agent = WebUtils.getUserAgent(request); ClientInfo clientInfo = new ClientInfo(agent); @@ -147,7 +146,7 @@ public JSONObject list(HttpServletRequest request) throws Exception { Constants.DEFAULT_NAMESPACE_ID); String serviceName = WebUtils.required(request, CommonParams.SERVICE_NAME); - String agent = request.getHeader(HttpHeaderConsts.USER_AGENT_HEADER); + String agent = WebUtils.getUserAgent(request); String clusters = WebUtils.optional(request, "clusters", StringUtils.EMPTY); String clientIP = WebUtils.optional(request, "clientIP", StringUtils.EMPTY); Integer udpPort = Integer.parseInt(WebUtils.optional(request, "udpPort", "0")); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/web/TrafficReviseFilter.java b/naming/src/main/java/com/alibaba/nacos/naming/web/TrafficReviseFilter.java index 59f8c65f722..9240dbf0d1a 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/web/TrafficReviseFilter.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/web/TrafficReviseFilter.java @@ -15,8 +15,8 @@ */ package com.alibaba.nacos.naming.web; -import com.alibaba.nacos.common.constant.HttpHeaderConsts; import com.alibaba.nacos.common.util.HttpMethod; +import com.alibaba.nacos.core.utils.WebUtils; import com.alibaba.nacos.naming.cluster.ServerStatus; import com.alibaba.nacos.naming.cluster.ServerStatusManager; import com.alibaba.nacos.naming.misc.SwitchDomain; @@ -71,7 +71,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha } // requests from peer server should be let pass: - String agent = req.getHeader(HttpHeaderConsts.USER_AGENT_HEADER); + String agent = WebUtils.getUserAgent(req); if (StringUtils.startsWith(agent, UtilsAndCommons.NACOS_SERVER_HEADER)) { filterChain.doFilter(req, resp);