authService;
-
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
- throws Exception {
- if (handler.getClass().isAssignableFrom(HandlerMethod.class)) {
- Method method = ((HandlerMethod) handler).getMethod();
-
- AuthAction authAction = method.getAnnotation(AuthAction.class);
- if (authAction != null) {
- AuthService.AuthUser authUser = authService.getAuthUser(request);
- if (authUser == null) {
- responseNoPrivilegeMsg(response, authAction.message());
- return false;
- }
- String target = request.getParameter(authAction.targetName());
-
- if (!authUser.authTarget(target, authAction.value())) {
- responseNoPrivilegeMsg(response, authAction.message());
- return false;
- }
- }
- }
-
- return true;
- }
-
- private void responseNoPrivilegeMsg(HttpServletResponse response, String message) throws IOException {
- Result result = Result.ofFail(-1, message);
- response.addHeader("Content-Type", "application/json;charset=UTF-8");
- response.getOutputStream().write(JSON.toJSONBytes(result));
- }
+public interface AuthorizationInterceptor extends HandlerInterceptor {
}
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/DefaultAuthorizationInterceptor.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/DefaultAuthorizationInterceptor.java
new file mode 100644
index 000000000..56c537c03
--- /dev/null
+++ b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/DefaultAuthorizationInterceptor.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 1999-2018 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.csp.sentinel.dashboard.auth;
+
+import com.alibaba.csp.sentinel.dashboard.domain.Result;
+import com.alibaba.fastjson.JSON;
+import org.springframework.web.method.HandlerMethod;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.lang.reflect.Method;
+
+/**
+ * The web interceptor for privilege-based authorization. 不需要
+ *
+ * move from old {@link AuthorizationInterceptor}.
+ *
+ * @author lkxiaolou
+ * @author wxq
+ * @since 1.7.1
+ */
+public class DefaultAuthorizationInterceptor implements AuthorizationInterceptor {
+
+ private final AuthService authService;
+
+ public DefaultAuthorizationInterceptor(AuthService authService) {
+ this.authService = authService;
+ }
+
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
+ throws Exception {
+ if (handler.getClass().isAssignableFrom(HandlerMethod.class)) {
+ Method method = ((HandlerMethod) handler).getMethod();
+
+ AuthAction authAction = method.getAnnotation(AuthAction.class);
+ if (authAction != null) {
+ AuthService.AuthUser authUser = authService.getAuthUser(request);
+ if (authUser == null) {
+ responseNoPrivilegeMsg(response, authAction.message());
+ return false;
+ }
+ String target = request.getParameter(authAction.targetName());
+
+ if (!authUser.authTarget(target, authAction.value())) {
+ responseNoPrivilegeMsg(response, authAction.message());
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ private void responseNoPrivilegeMsg(HttpServletResponse response, String message) throws IOException {
+ Result result = Result.ofFail(-1, message);
+ response.addHeader("Content-Type", "application/json;charset=UTF-8");
+ response.getOutputStream().write(JSON.toJSONBytes(result));
+ }
+
+}
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/DefaultLoginAuthenticationFilter.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/DefaultLoginAuthenticationFilter.java
new file mode 100644
index 000000000..b8a864deb
--- /dev/null
+++ b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/DefaultLoginAuthenticationFilter.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright 1999-2018 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.csp.sentinel.dashboard.auth;
+
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.util.AntPathMatcher;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ *
+ * The Servlet filter for authentication.
+ *
+ *
+ *
+ * Note: some urls are excluded as they needn't auth, such as:
+ *
+ *
+ * - index url: {@code /}
+ * - authentication request url: {@code /login}, {@code /logout}
+ * - machine registry: {@code /registry/machine}
+ * - static resources
+ *
+ *
+ * The excluded urls and urlSuffixes could be configured in {@code application.properties}
+ * file.
+ *
+ * @author cdfive 不需要
+ * @since 1.6.0
+ */
+public class DefaultLoginAuthenticationFilter implements LoginAuthenticationFilter {
+
+ private static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
+
+ private static final String URL_SUFFIX_DOT = ".";
+
+ /**
+ * 忽略鉴权的url
+ */
+ @Value("#{'${auth.filter.exclude-urls}'.split(',')}")
+ private List authFilterExcludeUrls;
+
+ /**
+ * 根据后缀不需要鉴权的url
+ */
+ @Value("#{'${auth.filter.exclude-url-suffixes}'.split(',')}")
+ private List authFilterExcludeUrlSuffixes;
+
+ /**
+ * Authentication using AuthService interface.
+ */
+ private final AuthService authService;
+
+ public DefaultLoginAuthenticationFilter(AuthService authService) {
+ this.authService = authService;
+ }
+
+ @Override
+ public void init(FilterConfig filterConfig) throws ServletException {
+
+ }
+
+ @Override
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+ throws IOException, ServletException {
+ HttpServletRequest httpRequest = (HttpServletRequest) request;
+
+ String servletPath = httpRequest.getServletPath();
+
+ // Exclude the urls which needn't auth
+ boolean authFilterExcludeMatch = authFilterExcludeUrls.stream()
+ .anyMatch(authFilterExcludeUrl -> PATH_MATCHER.match(authFilterExcludeUrl, servletPath));
+ if (authFilterExcludeMatch) {
+ chain.doFilter(request, response);
+ return;
+ }
+
+ // Exclude the urls with suffixes which needn't auth
+ for (String authFilterExcludeUrlSuffix : authFilterExcludeUrlSuffixes) {
+ if (StringUtils.isBlank(authFilterExcludeUrlSuffix)) {
+ continue;
+ }
+
+ // Add . for url suffix so that we needn't add . in property file
+ if (!authFilterExcludeUrlSuffix.startsWith(URL_SUFFIX_DOT)) {
+ authFilterExcludeUrlSuffix = URL_SUFFIX_DOT + authFilterExcludeUrlSuffix;
+ }
+
+ if (servletPath.endsWith(authFilterExcludeUrlSuffix)) {
+ chain.doFilter(request, response);
+ return;
+ }
+ }
+
+ AuthService.AuthUser authUser = authService.getAuthUser(httpRequest);
+
+ HttpServletResponse httpResponse = (HttpServletResponse) response;
+ if (authUser == null) {
+ // If auth fail, set response status code to 401
+ httpResponse.setStatus(HttpStatus.UNAUTHORIZED.value());
+ }
+ else {
+ chain.doFilter(request, response);
+ }
+ }
+
+ @Override
+ public void destroy() {
+
+ }
+
+}
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/FakeAuthServiceImpl.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/FakeAuthServiceImpl.java
index 979ee5659..73c568e12 100644
--- a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/FakeAuthServiceImpl.java
+++ b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/FakeAuthServiceImpl.java
@@ -15,7 +15,8 @@
*/
package com.alibaba.csp.sentinel.dashboard.auth;
-import org.springframework.stereotype.Component;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletRequest;
@@ -25,9 +26,14 @@ import javax.servlet.http.HttpServletRequest;
* @author Carpenter Lee
* @since 1.5.0
*/
-@Component
public class FakeAuthServiceImpl implements AuthService {
+ private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+ public FakeAuthServiceImpl() {
+ this.logger.warn("there is no auth, use {} by implementation {}", AuthService.class, this.getClass());
+ }
+
@Override
public AuthUser getAuthUser(HttpServletRequest request) {
return new AuthUserImpl();
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/LoginAuthenticationFilter.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/LoginAuthenticationFilter.java
index 1b63873d5..b44f11197 100644
--- a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/LoginAuthenticationFilter.java
+++ b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/LoginAuthenticationFilter.java
@@ -15,18 +15,7 @@
*/
package com.alibaba.csp.sentinel.dashboard.auth;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.HttpStatus;
-import org.springframework.stereotype.Component;
-import org.springframework.util.AntPathMatcher;
-
-import javax.servlet.*;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.List;
+import javax.servlet.Filter;
/**
*
@@ -42,92 +31,14 @@ import java.util.List;
*
machine registry: {@code /registry/machine}
* static resources
*
- *
+ *
* The excluded urls and urlSuffixes could be configured in {@code application.properties}
* file.
*
- * @author cdfive
+ * @author cdfive 不需要
+ * @author wxq
* @since 1.6.0
*/
-@Component
-public class LoginAuthenticationFilter implements Filter {
-
- private static final String URL_SUFFIX_DOT = ".";
-
- private static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
-
- /**
- * Some urls which needn't auth, such as /auth/login, /registry/machine and so on.
- */
- @Value("#{'${auth.filter.exclude-urls}'.split(',')}")
- private List authFilterExcludeUrls;
-
- /**
- * Some urls with suffixes which needn't auth, such as htm, html, js and so on.
- */
- @Value("#{'${auth.filter.exclude-url-suffixes}'.split(',')}")
- private List authFilterExcludeUrlSuffixes;
-
- /**
- * Authentication using AuthService interface.
- */
- @Autowired
- private AuthService authService;
-
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
-
- }
-
- @Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
- throws IOException, ServletException {
- HttpServletRequest httpRequest = (HttpServletRequest) request;
-
- String servletPath = httpRequest.getServletPath();
-
- // Exclude the urls which needn't auth
- if (authFilterExcludeUrls.stream().anyMatch(s -> PATH_MATCHER.match(s, servletPath))) {
- chain.doFilter(request, response);
- return;
- }
- if (authFilterExcludeUrls.contains(servletPath)) {
- chain.doFilter(request, response);
- return;
- }
-
- // Exclude the urls with suffixes which needn't auth
- for (String authFilterExcludeUrlSuffix : authFilterExcludeUrlSuffixes) {
- if (StringUtils.isBlank(authFilterExcludeUrlSuffix)) {
- continue;
- }
-
- // Add . for url suffix so that we needn't add . in property file
- if (!authFilterExcludeUrlSuffix.startsWith(URL_SUFFIX_DOT)) {
- authFilterExcludeUrlSuffix = URL_SUFFIX_DOT + authFilterExcludeUrlSuffix;
- }
-
- if (servletPath.endsWith(authFilterExcludeUrlSuffix)) {
- chain.doFilter(request, response);
- return;
- }
- }
-
- AuthService.AuthUser authUser = authService.getAuthUser(httpRequest);
-
- HttpServletResponse httpResponse = (HttpServletResponse) response;
- if (authUser == null) {
- // If auth fail, set response status code to 401
- httpResponse.setStatus(HttpStatus.UNAUTHORIZED.value());
- }
- else {
- chain.doFilter(request, response);
- }
- }
-
- @Override
- public void destroy() {
-
- }
+public interface LoginAuthenticationFilter extends Filter {
}
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/SimpleWebAuthServiceImpl.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/SimpleWebAuthServiceImpl.java
index bf85b49e8..6bcfb3547 100644
--- a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/SimpleWebAuthServiceImpl.java
+++ b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/SimpleWebAuthServiceImpl.java
@@ -15,20 +15,13 @@
*/
package com.alibaba.csp.sentinel.dashboard.auth;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.context.annotation.Primary;
-import org.springframework.stereotype.Component;
-
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
- * @author cdfive
+ * @author cdfive 不需要
* @since 1.6.0
*/
-@Component
-@Primary
-@ConditionalOnProperty(name = "auth.enabled", matchIfMissing = true)
public class SimpleWebAuthServiceImpl implements AuthService {
public static final String WEB_SESSION_KEY = "session_sentinel_admin";
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/client/SentinelApiClient.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/client/SentinelApiClient.java
old mode 100755
new mode 100644
index ac6885ae4..afeb58bb4
--- a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/client/SentinelApiClient.java
+++ b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/client/SentinelApiClient.java
@@ -171,8 +171,8 @@ public class SentinelApiClient {
}
/**
- * Check wheter target instance (identified by tuple of app-ip:port) supports the form
- * of "xxxxx; xx=xx" in "Content-Type" header.
+ * Check whether target instance (identified by tuple of app-ip:port) supports the
+ * form of "xxxxx; xx=xx" in "Content-Type" header.
* @param app target app name
* @param ip target node's address
* @param port target node's port
@@ -520,7 +520,7 @@ public class SentinelApiClient {
AssertUtil.notEmpty(ip, "Bad machine IP");
AssertUtil.isTrue(port > 0, "Bad machine port");
return fetchItemsAsync(ip, port, GET_PARAM_RULE_PATH, null, ParamFlowRule.class)
- .thenApply(rules -> rules.stream().map(e -> ParamFlowRuleEntity.fromAuthorityRule(app, ip, port, e))
+ .thenApply(rules -> rules.stream().map(e -> ParamFlowRuleEntity.fromParamFlowRule(app, ip, port, e))
.collect(Collectors.toList()));
}
catch (Exception e) {
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/config/AuthConfiguration.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/config/AuthConfiguration.java
new file mode 100644
index 000000000..63ad89a27
--- /dev/null
+++ b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/config/AuthConfiguration.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 1999-2018 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.csp.sentinel.dashboard.config;
+
+import com.alibaba.csp.sentinel.dashboard.auth.*;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Configuration
+@EnableConfigurationProperties(AuthProperties.class)
+public class AuthConfiguration {
+
+ private final AuthProperties authProperties;
+
+ public AuthConfiguration(AuthProperties authProperties) {
+ this.authProperties = authProperties;
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public AuthService httpServletRequestAuthService() {
+ if (this.authProperties.isEnabled()) {
+ return new SimpleWebAuthServiceImpl();
+ }
+ return new FakeAuthServiceImpl();
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public LoginAuthenticationFilter loginAuthenticationFilter(
+ AuthService httpServletRequestAuthService) {
+ return new DefaultLoginAuthenticationFilter(httpServletRequestAuthService);
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public AuthorizationInterceptor authorizationInterceptor(
+ AuthService httpServletRequestAuthService) {
+ return new DefaultAuthorizationInterceptor(httpServletRequestAuthService);
+ }
+
+}
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/config/AuthProperties.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/config/AuthProperties.java
new file mode 100644
index 000000000..961a857cd
--- /dev/null
+++ b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/config/AuthProperties.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright 1999-2018 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.csp.sentinel.dashboard.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@ConfigurationProperties(prefix = "auth")
+public class AuthProperties {
+
+ private boolean enabled = true;
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+
+}
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/config/WebConfig.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/config/WebConfig.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/AppController.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/AppController.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/DegradeController.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/DegradeController.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/DemoController.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/DemoController.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/FlowControllerV1.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/FlowControllerV1.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/MachineRegistryController.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/MachineRegistryController.java
old mode 100755
new mode 100644
index 887659bb9..c23ecf709
--- a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/MachineRegistryController.java
+++ b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/MachineRegistryController.java
@@ -16,7 +16,6 @@
package com.alibaba.csp.sentinel.dashboard.controller;
import com.alibaba.csp.sentinel.dashboard.discovery.AppManagement;
-import com.alibaba.csp.sentinel.dashboard.discovery.MachineDiscovery;
import com.alibaba.csp.sentinel.dashboard.discovery.MachineInfo;
import com.alibaba.csp.sentinel.dashboard.domain.Result;
import com.alibaba.csp.sentinel.util.StringUtil;
@@ -28,6 +27,7 @@ import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
+import sun.net.util.IPAddressUtil;
@Controller
@RequestMapping(value = "/registry", produces = MediaType.APPLICATION_JSON_VALUE)
@@ -43,20 +43,27 @@ public class MachineRegistryController {
public Result> receiveHeartBeat(String app,
@RequestParam(value = "app_type", required = false, defaultValue = "0") Integer appType, Long version,
String v, String hostname, String ip, Integer port) {
- if (app == null) {
- app = MachineDiscovery.UNKNOWN_APP_NAME;
+ if (StringUtil.isBlank(app) || app.length() > 256) {
+ return Result.ofFail(-1, "invalid appName");
}
- if (ip == null) {
- return Result.ofFail(-1, "ip can't be null");
+ if (StringUtil.isBlank(ip) || ip.length() > 128) {
+ return Result.ofFail(-1, "invalid ip: " + ip);
}
- if (port == null) {
- return Result.ofFail(-1, "port can't be null");
+ if (!IPAddressUtil.isIPv4LiteralAddress(ip) && !IPAddressUtil.isIPv6LiteralAddress(ip)) {
+ return Result.ofFail(-1, "invalid ip: " + ip);
+ }
+ if (port == null || port < -1) {
+ return Result.ofFail(-1, "invalid port");
+ }
+ if (hostname != null && hostname.length() > 256) {
+ return Result.ofFail(-1, "hostname too long");
}
if (port == -1) {
- logger.info("Receive heartbeat from " + ip + " but port not set yet");
+ logger.warn("Receive heartbeat from " + ip + " but port not set yet");
return Result.ofFail(-1, "your port not set yet");
}
- String sentinelVersion = StringUtil.isEmpty(v) ? "unknown" : v;
+ String sentinelVersion = StringUtil.isBlank(v) ? "unknown" : v;
+
version = version == null ? System.currentTimeMillis() : version;
try {
MachineInfo machineInfo = new MachineInfo();
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/MetricController.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/MetricController.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ParamFlowRuleController.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ParamFlowRuleController.java
index 4134d424b..f81d64cd9 100644
--- a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ParamFlowRuleController.java
+++ b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ParamFlowRuleController.java
@@ -16,7 +16,6 @@
package com.alibaba.csp.sentinel.dashboard.controller;
import com.alibaba.csp.sentinel.dashboard.auth.AuthAction;
-import com.alibaba.csp.sentinel.dashboard.auth.AuthService;
import com.alibaba.csp.sentinel.dashboard.auth.AuthService.PrivilegeType;
import com.alibaba.csp.sentinel.dashboard.client.CommandNotFoundException;
import com.alibaba.csp.sentinel.dashboard.client.SentinelApiClient;
@@ -111,7 +110,7 @@ public class ParamFlowRuleController {
}
@PostMapping("/rule")
- @AuthAction(AuthService.PrivilegeType.WRITE_RULE)
+ @AuthAction(PrivilegeType.WRITE_RULE)
public Result apiAddParamFlowRule(@RequestBody ParamFlowRuleEntity entity) {
Result checkResult = checkEntityInternal(entity);
if (checkResult != null) {
@@ -183,7 +182,7 @@ public class ParamFlowRuleController {
}
@PutMapping("/rule/{id}")
- @AuthAction(AuthService.PrivilegeType.WRITE_RULE)
+ @AuthAction(PrivilegeType.WRITE_RULE)
public Result apiUpdateParamFlowRule(@PathVariable("id") Long id,
@RequestBody ParamFlowRuleEntity entity) {
if (id == null || id <= 0) {
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ResourceController.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ResourceController.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/SystemController.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/SystemController.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/v2/FlowControllerV2.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/v2/FlowControllerV2.java
old mode 100755
new mode 100644
index c655071de..99b595bbf
--- a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/v2/FlowControllerV2.java
+++ b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/v2/FlowControllerV2.java
@@ -16,7 +16,6 @@
package com.alibaba.csp.sentinel.dashboard.controller.v2;
import com.alibaba.csp.sentinel.dashboard.auth.AuthAction;
-import com.alibaba.csp.sentinel.dashboard.auth.AuthService;
import com.alibaba.csp.sentinel.dashboard.auth.AuthService.PrivilegeType;
import com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity;
import com.alibaba.csp.sentinel.dashboard.domain.Result;
@@ -127,7 +126,7 @@ public class FlowControllerV2 {
}
@PostMapping("/rule")
- @AuthAction(value = AuthService.PrivilegeType.WRITE_RULE)
+ @AuthAction(value = PrivilegeType.WRITE_RULE)
public Result apiAddFlowRule(@RequestBody FlowRuleEntity entity) {
Result checkResult = checkEntityInternal(entity);
@@ -152,7 +151,7 @@ public class FlowControllerV2 {
}
@PutMapping("/rule/{id}")
- @AuthAction(AuthService.PrivilegeType.WRITE_RULE)
+ @AuthAction(PrivilegeType.WRITE_RULE)
public Result apiUpdateFlowRule(@PathVariable("id") Long id, @RequestBody FlowRuleEntity entity) {
if (id == null || id <= 0) {
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/ApplicationEntity.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/ApplicationEntity.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/MachineEntity.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/MachineEntity.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/MetricEntity.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/MetricEntity.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/MetricPositionEntity.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/MetricPositionEntity.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/DegradeRuleEntity.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/DegradeRuleEntity.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/FlowRuleEntity.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/FlowRuleEntity.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/ParamFlowRuleEntity.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/ParamFlowRuleEntity.java
index b5a2977d9..c90ef913c 100644
--- a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/ParamFlowRuleEntity.java
+++ b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/ParamFlowRuleEntity.java
@@ -38,7 +38,7 @@ public class ParamFlowRuleEntity extends AbstractRuleEntity {
this.rule = rule;
}
- public static ParamFlowRuleEntity fromAuthorityRule(String app, String ip, Integer port, ParamFlowRule rule) {
+ public static ParamFlowRuleEntity fromParamFlowRule(String app, String ip, Integer port, ParamFlowRule rule) {
ParamFlowRuleEntity entity = new ParamFlowRuleEntity(rule);
entity.setApp(app);
entity.setIp(ip);
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/RuleEntity.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/RuleEntity.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/SystemRuleEntity.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/SystemRuleEntity.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/AppInfo.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/AppInfo.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/AppManagement.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/AppManagement.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/MachineDiscovery.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/MachineDiscovery.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/MachineInfo.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/MachineInfo.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/SimpleMachineDiscovery.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/SimpleMachineDiscovery.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/domain/ResourceTreeNode.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/domain/ResourceTreeNode.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/domain/Result.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/domain/Result.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/domain/vo/MachineInfoVo.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/domain/vo/MachineInfoVo.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/domain/vo/MetricVo.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/domain/vo/MetricVo.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/domain/vo/ResourceVo.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/domain/vo/ResourceVo.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/domain/vo/gateway/api/ApiPredicateItemVo.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/domain/vo/gateway/api/ApiPredicateItemVo.java
index a11cd7c16..52300d95f 100644
--- a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/domain/vo/gateway/api/ApiPredicateItemVo.java
+++ b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/domain/vo/gateway/api/ApiPredicateItemVo.java
@@ -23,8 +23,21 @@ package com.alibaba.csp.sentinel.dashboard.domain.vo.gateway.api;
*/
public class ApiPredicateItemVo {
+ /**
+ * The pattern for matching url.
+ */
private String pattern;
+ /**
+ * The matching Strategy in url. Constants are defined in class
+ * SentinelGatewayConstants.\
+ *
+ *
+ * - 0(URL_MATCH_STRATEGY_EXACT): exact match mode
+ * - 1(URL_MATCH_STRATEGY_PREFIX): prefix match mode
+ * - 2(URL_MATCH_STRATEGY_REGEX): regex match mode
+ *
+ */
private Integer matchStrategy;
public String getPattern() {
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/metric/MetricFetcher.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/metric/MetricFetcher.java
old mode 100755
new mode 100644
index 8adb23099..ec42af53b
--- a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/metric/MetricFetcher.java
+++ b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/metric/MetricFetcher.java
@@ -84,7 +84,7 @@ public class MetricFetcher {
@SuppressWarnings("PMD.ThreadPoolCreationRule")
private ScheduledExecutorService fetchScheduleService = Executors.newScheduledThreadPool(1,
- new NamedThreadFactory("sentinel-dashboard-metrics-fetch-task"));
+ new NamedThreadFactory("sentinel-dashboard-metrics-fetch-task", true));
private ExecutorService fetchService;
@@ -96,11 +96,11 @@ public class MetricFetcher {
int queueSize = 2048;
RejectedExecutionHandler handler = new DiscardPolicy();
fetchService = new ThreadPoolExecutor(cores, cores, keepAliveTime, TimeUnit.MILLISECONDS,
- new ArrayBlockingQueue<>(queueSize), new NamedThreadFactory("sentinel-dashboard-metrics-fetchService"),
- handler);
+ new ArrayBlockingQueue<>(queueSize),
+ new NamedThreadFactory("sentinel-dashboard-metrics-fetchService", true), handler);
fetchWorker = new ThreadPoolExecutor(cores, cores, keepAliveTime, TimeUnit.MILLISECONDS,
- new ArrayBlockingQueue<>(queueSize), new NamedThreadFactory("sentinel-dashboard-metrics-fetchWorker"),
- handler);
+ new ArrayBlockingQueue<>(queueSize),
+ new NamedThreadFactory("sentinel-dashboard-metrics-fetchWorker", true), handler);
IOReactorConfig ioConfig = IOReactorConfig.custom().setConnectTimeout(3000).setSoTimeout(3000)
.setIoThreadCount(Runtime.getRuntime().availableProcessors() * 2).build();
@@ -249,7 +249,7 @@ public class MetricFetcher {
catch (Exception e) {
logger.info(msg + " metric, wait http client error:", e);
}
- long cost = System.currentTimeMillis() - start;
+ // long cost = System.currentTimeMillis() - start;
// logger.info("finished " + msg + " metric for " + app + ", time intervalMs [" +
// startTime + ", " + endTime
// + "], total machines=" + machines.size() + ", dead=" + dead + ", fetch
@@ -268,7 +268,7 @@ public class MetricFetcher {
lastFetchMs = lastFetchMs / 1000 * 1000;
long endTime = lastFetchMs + FETCH_INTERVAL_SECOND * 1000;
if (endTime > now - 1000 * 2) {
- // to near
+ // too near
return;
}
// update last_fetch in advance.
@@ -336,26 +336,24 @@ public class MetricFetcher {
* aggregation metrics by app_resource_timeSecond, ignore ip and port.
*/
String key = buildMetricKey(machine.getApp(), node.getResource(), node.getTimestamp());
- MetricEntity entity = map.get(key);
- if (entity != null) {
- entity.addPassQps(node.getPassQps());
- entity.addBlockQps(node.getBlockQps());
- entity.addRtAndSuccessQps(node.getRt(), node.getSuccessQps());
- entity.addExceptionQps(node.getExceptionQps());
- entity.addCount(1);
- }
- else {
- entity = new MetricEntity();
- entity.setApp(machine.getApp());
- entity.setTimestamp(new Date(node.getTimestamp()));
- entity.setPassQps(node.getPassQps());
- entity.setBlockQps(node.getBlockQps());
- entity.setRtAndSuccessQps(node.getRt(), node.getSuccessQps());
- entity.setExceptionQps(node.getExceptionQps());
- entity.setCount(1);
- entity.setResource(node.getResource());
- map.put(key, entity);
- }
+
+ MetricEntity metricEntity = map.computeIfAbsent(key, s -> {
+ MetricEntity initMetricEntity = new MetricEntity();
+ initMetricEntity.setApp(machine.getApp());
+ initMetricEntity.setTimestamp(new Date(node.getTimestamp()));
+ initMetricEntity.setPassQps(0L);
+ initMetricEntity.setBlockQps(0L);
+ initMetricEntity.setRtAndSuccessQps(0, 0L);
+ initMetricEntity.setExceptionQps(0L);
+ initMetricEntity.setCount(0);
+ initMetricEntity.setResource(node.getResource());
+ return initMetricEntity;
+ });
+ metricEntity.addPassQps(node.getPassQps());
+ metricEntity.addBlockQps(node.getBlockQps());
+ metricEntity.addRtAndSuccessQps(node.getRt(), node.getSuccessQps());
+ metricEntity.addExceptionQps(node.getExceptionQps());
+ metricEntity.addCount(1);
}
catch (Exception e) {
logger.warn("handleBody line exception, machine: {}, line: {}", machine.toLogString(), line);
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/rule/InMemDegradeRuleStore.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/rule/InMemDegradeRuleStore.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/rule/InMemFlowRuleStore.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/rule/InMemFlowRuleStore.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/rule/InMemSystemRuleStore.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/rule/InMemSystemRuleStore.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/rule/InMemoryRuleRepositoryAdapter.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/rule/InMemoryRuleRepositoryAdapter.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/rule/RuleRepository.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/rule/RuleRepository.java
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/ClusterEntityUtils.java b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/ClusterEntityUtils.java
index c43e92d63..a4cb6de12 100644
--- a/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/ClusterEntityUtils.java
+++ b/pigx-visual/pigx-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/ClusterEntityUtils.java
@@ -107,7 +107,8 @@ public final class ClusterEntityUtils {
if (mode == ClusterStateManager.CLUSTER_SERVER) {
String serverAddress = getIp(ip);
int port = stateVO.getState().getServer().getPort();
- map.computeIfAbsent(serverAddress, v -> new ClusterGroupEntity().setBelongToApp(true)
+ String targetAddress = serverAddress + ":" + port;
+ map.computeIfAbsent(targetAddress, v -> new ClusterGroupEntity().setBelongToApp(true)
.setMachineId(ip + '@' + stateVO.getCommandPort()).setIp(ip).setPort(port));
}
}
@@ -120,8 +121,8 @@ public final class ClusterEntityUtils {
if (StringUtil.isBlank(targetServer) || targetPort == null || targetPort <= 0) {
continue;
}
-
- ClusterGroupEntity group = map.computeIfAbsent(targetServer, v -> new ClusterGroupEntity()
+ String targetAddress = targetServer + ":" + targetPort;
+ ClusterGroupEntity group = map.computeIfAbsent(targetAddress, v -> new ClusterGroupEntity()
.setBelongToApp(true).setMachineId(targetServer).setIp(targetServer).setPort(targetPort));
group.getClientSet().add(ip + '@' + stateVO.getCommandPort());
}
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/.gitignore b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/.gitignore
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/.jshintrc b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/.jshintrc
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/README.md b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/README.md
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/app.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/app.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/degrade.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/degrade.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/flow_v1.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/flow_v1.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/flow_v2.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/flow_v2.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/home.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/home.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/identity.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/identity.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/machine.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/machine.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/main.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/main.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/metric.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/metric.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/system.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/system.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/header/header.html b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/header/header.html
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/header/header.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/header/header.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/sidebar/sidebar-search/sidebar-search.html b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/sidebar/sidebar-search/sidebar-search.html
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/sidebar/sidebar-search/sidebar-search.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/sidebar/sidebar-search/sidebar-search.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/sidebar/sidebar.html b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/sidebar/sidebar.html
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/sidebar/sidebar.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/sidebar/sidebar.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/filters/filters.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/filters/filters.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/libs/treeTable.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/libs/treeTable.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/services/appservice.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/services/appservice.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/services/degrade_service.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/services/degrade_service.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/services/flow_service_v1.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/services/flow_service_v1.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/services/flow_service_v2.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/services/flow_service_v2.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/services/identityservice.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/services/identityservice.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/services/machineservice.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/services/machineservice.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/services/metricservice.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/services/metricservice.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/services/systemservice.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/scripts/services/systemservice.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/styles/main.css b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/styles/main.css
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/styles/page.css b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/styles/page.css
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/styles/timeline.css b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/styles/timeline.css
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/cluster_single_config.html b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/cluster_single_config.html
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/dashboard/home.html b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/dashboard/home.html
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/dashboard/main.html b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/dashboard/main.html
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/degrade.html b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/degrade.html
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/dialog/cluster/cluster-client-config-dialog.html b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/dialog/cluster/cluster-client-config-dialog.html
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/dialog/confirm-dialog.html b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/dialog/confirm-dialog.html
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/dialog/degrade-rule-dialog.html b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/dialog/degrade-rule-dialog.html
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/dialog/flow-rule-dialog.html b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/dialog/flow-rule-dialog.html
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/dialog/system-rule-dialog.html b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/dialog/system-rule-dialog.html
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/flow_v1.html b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/flow_v1.html
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/flow_v2.html b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/flow_v2.html
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/identity.html b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/identity.html
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/machine.html b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/machine.html
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/metric.html b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/metric.html
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/pagination.tpl.html b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/pagination.tpl.html
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/system.html b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/app/views/system.html
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/dist/css/app.css b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/dist/css/app.css
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/dist/js/app.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/dist/js/app.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/dist/js/app.vendor.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/dist/js/app.vendor.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/gulpfile.js b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/gulpfile.js
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/index.htm b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/index.htm
old mode 100755
new mode 100644
index 3c8334120..244828982
--- a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/index.htm
+++ b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/index.htm
@@ -10,6 +10,8 @@
+
+
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/index_dev.htm b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/index_dev.htm
old mode 100755
new mode 100644
index a2a85efc4..51131681a
--- a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/index_dev.htm
+++ b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/index_dev.htm
@@ -10,6 +10,8 @@
+
+
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/license-stat.csv b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/license-stat.csv
old mode 100755
new mode 100644
diff --git a/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/package.json b/pigx-visual/pigx-sentinel-dashboard/src/main/webapp/resources/package.json
old mode 100755
new mode 100644