+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *
+ * http://www.gnu.org/licenses/lgpl.html + *
+ * 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 org.springblade.core.cloud.config;
+
+import feign.RequestInterceptor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.cloud.feign.BladeFeignRequestHeaderInterceptor;
+import org.springblade.core.cloud.feign.FeignHystrixConcurrencyStrategy;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * WEB配置
+ *
+ * @author Chill
+ */
+@Slf4j
+@Configuration
+@EnableCaching
+@Order(Ordered.HIGHEST_PRECEDENCE)
+public class BladeFeignConfiguration implements WebMvcConfigurer {
+
+ @Bean
+ @ConditionalOnMissingBean
+ public RequestInterceptor requestInterceptor() {
+ return new BladeFeignRequestHeaderInterceptor();
+ }
+
+ @Bean
+ public FeignHystrixConcurrencyStrategy feignHystrixConcurrencyStrategy() {
+ return new FeignHystrixConcurrencyStrategy();
+ }
+
+}
diff --git a/blade-core-boot/src/main/java/org/springblade/core/boot/feign/BladeFeignRequestHeaderInterceptor.java b/blade-core-cloud/src/main/java/org/springblade/core/cloud/feign/BladeFeignRequestHeaderInterceptor.java
similarity index 92%
rename from blade-core-boot/src/main/java/org/springblade/core/boot/feign/BladeFeignRequestHeaderInterceptor.java
rename to blade-core-cloud/src/main/java/org/springblade/core/cloud/feign/BladeFeignRequestHeaderInterceptor.java
index 6148b3d..94cb4dd 100644
--- a/blade-core-boot/src/main/java/org/springblade/core/boot/feign/BladeFeignRequestHeaderInterceptor.java
+++ b/blade-core-cloud/src/main/java/org/springblade/core/cloud/feign/BladeFeignRequestHeaderInterceptor.java
@@ -13,12 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.springblade.core.boot.feign;
+package org.springblade.core.cloud.feign;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import lombok.extern.slf4j.Slf4j;
-import org.springblade.core.secure.utils.SecureUtil;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@@ -43,7 +42,7 @@ public class BladeFeignRequestHeaderInterceptor implements RequestInterceptor {
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String value = request.getHeader(name);
- if (SecureUtil.HEADER.equals(name)) {
+ if ("blade-auth".equals(name)) {
requestTemplate.header(name, value);
}
}
diff --git a/blade-core-boot/src/main/java/org/springblade/core/boot/feign/FeignHystrixConcurrencyStrategy.java b/blade-core-cloud/src/main/java/org/springblade/core/cloud/feign/FeignHystrixConcurrencyStrategy.java
similarity index 99%
rename from blade-core-boot/src/main/java/org/springblade/core/boot/feign/FeignHystrixConcurrencyStrategy.java
rename to blade-core-cloud/src/main/java/org/springblade/core/cloud/feign/FeignHystrixConcurrencyStrategy.java
index 5492316..32d883e 100644
--- a/blade-core-boot/src/main/java/org/springblade/core/boot/feign/FeignHystrixConcurrencyStrategy.java
+++ b/blade-core-cloud/src/main/java/org/springblade/core/cloud/feign/FeignHystrixConcurrencyStrategy.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.springblade.core.boot.feign;
+package org.springblade.core.cloud.feign;
import com.netflix.hystrix.HystrixThreadPoolKey;
import com.netflix.hystrix.HystrixThreadPoolProperties;
diff --git a/blade-core-launch/pom.xml b/blade-core-launch/pom.xml
index 1aead49..7391a37 100644
--- a/blade-core-launch/pom.xml
+++ b/blade-core-launch/pom.xml
@@ -5,7 +5,7 @@
- * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - *
- * http://www.gnu.org/licenses/lgpl.html - *
- * 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 org.springblade.core.launch.config; - -import com.ecwid.consul.v1.ConsulClient; -import org.springblade.core.launch.consul.BladeConsulServiceRegistry; -import org.springblade.core.launch.server.ServerInfo; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.AutoConfigureBefore; -import org.springframework.cloud.consul.ConditionalOnConsulEnabled; -import org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties; -import org.springframework.cloud.consul.discovery.HeartbeatProperties; -import org.springframework.cloud.consul.discovery.TtlScheduler; -import org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistry; -import org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistryAutoConfiguration; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * Consul自定义注册规则 - * - * @author Chill - */ -@Configuration -@ConditionalOnConsulEnabled -@AutoConfigureBefore(ConsulServiceRegistryAutoConfiguration.class) -public class BladeConsulServiceRegistryConfiguration { - - @Autowired(required = false) - private TtlScheduler ttlScheduler; - - @Autowired - private ServerInfo serverInfo; - - @Bean - public ConsulServiceRegistry consulServiceRegistry(ConsulClient consulClient, ConsulDiscoveryProperties properties, - HeartbeatProperties heartbeatProperties) { - return new BladeConsulServiceRegistry(consulClient, properties, ttlScheduler, heartbeatProperties, serverInfo); - } - -} diff --git a/blade-core-launch/src/main/java/org/springblade/core/launch/config/BladeLaunchConfiguration.java b/blade-core-launch/src/main/java/org/springblade/core/launch/config/BladeLaunchConfiguration.java index e24ee57..38dd054 100644 --- a/blade-core-launch/src/main/java/org/springblade/core/launch/config/BladeLaunchConfiguration.java +++ b/blade-core-launch/src/main/java/org/springblade/core/launch/config/BladeLaunchConfiguration.java @@ -17,11 +17,7 @@ package org.springblade.core.launch.config; import lombok.AllArgsConstructor; import org.springblade.core.launch.props.BladeProperties; -import org.springblade.core.launch.server.ServerInfo; -import org.springframework.boot.autoconfigure.web.ServerProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.commons.util.InetUtils; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; @@ -39,16 +35,4 @@ import org.springframework.core.annotation.Order; }) public class BladeLaunchConfiguration { - private ServerProperties serverProperties; - private InetUtils inetUtils; - - - /** - * 服务器信息 - */ - @Bean - public ServerInfo serverInfo() { - return new ServerInfo(serverProperties, inetUtils); - } - } diff --git a/blade-core-launch/src/main/java/org/springblade/core/launch/consul/BladeConsulServiceRegistry.java b/blade-core-launch/src/main/java/org/springblade/core/launch/consul/BladeConsulServiceRegistry.java deleted file mode 100644 index 61e6566..0000000 --- a/blade-core-launch/src/main/java/org/springblade/core/launch/consul/BladeConsulServiceRegistry.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com). - *
- * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - *
- * http://www.gnu.org/licenses/lgpl.html - *
- * 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 org.springblade.core.launch.consul; - -import com.ecwid.consul.v1.ConsulClient; -import org.springblade.core.launch.server.ServerInfo; -import org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties; -import org.springframework.cloud.consul.discovery.HeartbeatProperties; -import org.springframework.cloud.consul.discovery.TtlScheduler; -import org.springframework.cloud.consul.serviceregistry.ConsulRegistration; -import org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistry; - -/** - * Consul自定义注册规则 - * - * @author Chill - */ -public class BladeConsulServiceRegistry extends ConsulServiceRegistry { - - private ServerInfo serverInfo; - - public BladeConsulServiceRegistry(ConsulClient client, ConsulDiscoveryProperties properties, TtlScheduler ttlScheduler, HeartbeatProperties heartbeatProperties, ServerInfo serverInfo) { - super(client, properties, ttlScheduler, heartbeatProperties); - this.serverInfo = serverInfo; - } - - @Override - public void register(ConsulRegistration reg) { - reg.getService().setId(reg.getService().getName() + "-" + serverInfo.getIP() + "-" + serverInfo.getPort()); - super.register(reg); - } - -} diff --git a/blade-core-launch/src/main/java/org/springblade/core/launch/server/ServerInfo.java b/blade-core-launch/src/main/java/org/springblade/core/launch/server/ServerInfo.java index bbaa157..3f989b6 100644 --- a/blade-core-launch/src/main/java/org/springblade/core/launch/server/ServerInfo.java +++ b/blade-core-launch/src/main/java/org/springblade/core/launch/server/ServerInfo.java @@ -15,53 +15,37 @@ */ package org.springblade.core.launch.server; +import lombok.Getter; +import org.springblade.core.launch.utils.INetUtil; +import org.springframework.beans.factory.SmartInitializingSingleton; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.web.ServerProperties; -import org.springframework.cloud.commons.util.InetUtils; +import org.springframework.context.annotation.Configuration; /** * 服务器信息 * * @author Chill */ -public class ServerInfo { - - private ServerProperties serverProperties; - private InetUtils inetUtils; +@Getter +@Configuration +public class ServerInfo implements SmartInitializingSingleton { + private final ServerProperties serverProperties; private String hostName; private String ip; private Integer port; private String ipWithPort; - public ServerInfo(ServerProperties serverProperties, InetUtils inetUtils) { + @Autowired(required = false) + public ServerInfo(ServerProperties serverProperties) { this.serverProperties = serverProperties; - this.inetUtils = inetUtils; - this.hostName = getHostInfo().getHostname(); - this.ip = getHostInfo().getIpAddress(); + } + + @Override + public void afterSingletonsInstantiated() { + this.hostName = INetUtil.getHostName(); + this.ip = INetUtil.getHostIp(); this.port = serverProperties.getPort(); this.ipWithPort = String.format("%s:%d", ip, port); } - - public InetUtils.HostInfo getHostInfo() { - return inetUtils.findFirstNonLoopbackHostInfo(); - } - - public String getIP() { - return this.ip; - } - - public Integer getPort() { - return this.port; - } - - public String getHostName() { - return this.hostName; - } - - public String getIPWithPort() { - return this.ipWithPort; - } - - public ServerProperties getServerProperties() { - return this.serverProperties; - } } diff --git a/blade-core-launch/src/main/java/org/springblade/core/launch/utils/INetUtil.java b/blade-core-launch/src/main/java/org/springblade/core/launch/utils/INetUtil.java new file mode 100644 index 0000000..b1b6791 --- /dev/null +++ b/blade-core-launch/src/main/java/org/springblade/core/launch/utils/INetUtil.java @@ -0,0 +1,156 @@ +/** + * Copyright (c) 2019-2029, DreamLu 卢春梦 (596392912@qq.com & www.dreamlu.net). + *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *
+ * http://www.gnu.org/licenses/lgpl.html + *
+ * 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 org.springblade.core.launch.utils; + +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.ServerSocket; +import java.net.UnknownHostException; +import java.util.Enumeration; + +/** + * INet 相关工具 + * + * @author L.cm + */ +public class INetUtil { + public static final String LOCAL_HOST = "127.0.0.1"; + + /** + * 获取 服务器 hostname + * + * @return hostname + */ + public static String getHostName() { + String hostname; + try { + InetAddress address = InetAddress.getLocalHost(); + // force a best effort reverse DNS lookup + hostname = address.getHostName(); + if (hostname == null || "".equals(hostname)) { + hostname = address.toString(); + } + } catch (UnknownHostException ignore) { + hostname = LOCAL_HOST; + } + return hostname; + } + + /** + * 获取 服务器 HostIp + * + * @return HostIp + */ + public static String getHostIp() { + String hostAddress; + try { + InetAddress address = INetUtil.getLocalHostLANAddress(); + // force a best effort reverse DNS lookup + hostAddress = address.getHostAddress(); + if (hostAddress == null || "".equals(hostAddress)) { + hostAddress = address.toString(); + } + } catch (UnknownHostException ignore) { + hostAddress = LOCAL_HOST; + } + return hostAddress; + } + + /** + * https://stackoverflow.com/questions/9481865/getting-the-ip-address-of-the-current-machine-using-java + * + *
+ * Returns an InetAddress
object encapsulating what is most likely the machine's LAN IP address.
+ *
InetAddress.getLocalHost
, because
+ * that method is ambiguous on Linux systems. Linux systems enumerate the loopback network interface the same
+ * way as regular LAN network interfaces, but the JDK InetAddress.getLocalHost
method does not
+ * specify the algorithm used to select the address returned under such circumstances, and will often return the
+ * loopback address, which is not valid for network communication. Details
+ * here.
+ *
+ * This method will scan all IP addresses on all network interfaces on the host machine to determine the IP address
+ * most likely to be the machine's LAN address. If the machine has multiple IP addresses, this method will prefer
+ * a site-local IP address (e.g. 192.168.x.x or 10.10.x.x, usually IPv4) if the machine has one (and will return the
+ * first site-local address if the machine has more than one), but if the machine does not hold a site-local
+ * address, this method will return simply the first non-loopback address found (IPv4 or IPv6).
+ *
+ * If this method cannot find a non-loopback address using this selection algorithm, it will fall back to
+ * calling and returning the result of JDK method InetAddress.getLocalHost
.
+ *
+ *
+ * @throws UnknownHostException If the LAN address of the machine cannot be found.
+ */
+ private static InetAddress getLocalHostLANAddress() throws UnknownHostException {
+ try {
+ InetAddress candidateAddress = null;
+ // Iterate all NICs (network interface cards)...
+ for (Enumeration ifaces = NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements(); ) {
+ NetworkInterface iface = (NetworkInterface) ifaces.nextElement();
+ // Iterate all IP addresses assigned to each card...
+ for (Enumeration inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements(); ) {
+ InetAddress inetAddr = (InetAddress) inetAddrs.nextElement();
+ if (!inetAddr.isLoopbackAddress()) {
+
+ if (inetAddr.isSiteLocalAddress()) {
+ // Found non-loopback site-local address. Return it immediately...
+ return inetAddr;
+ } else if (candidateAddress == null) {
+ // Found non-loopback address, but not necessarily site-local.
+ // Store it as a candidate to be returned if site-local address is not subsequently found...
+ candidateAddress = inetAddr;
+ // Note that we don't repeatedly assign non-loopback non-site-local addresses as candidates,
+ // only the first. For subsequent iterations, candidate will be non-null.
+ }
+ }
+ }
+ }
+ if (candidateAddress != null) {
+ // We did not find a site-local address, but we found some other non-loopback address.
+ // Server might have a non-site-local address assigned to its NIC (or it might be running
+ // IPv6 which deprecates the "site-local" concept).
+ // Return this non-loopback candidate address...
+ return candidateAddress;
+ }
+ // At this point, we did not find a non-loopback address.
+ // Fall back to returning whatever InetAddress.getLocalHost() returns...
+ InetAddress jdkSuppliedAddress = InetAddress.getLocalHost();
+ if (jdkSuppliedAddress == null) {
+ throw new UnknownHostException("The JDK InetAddress.getLocalHost() method unexpectedly returned null.");
+ }
+ return jdkSuppliedAddress;
+ } catch (Exception e) {
+ UnknownHostException unknownHostException = new UnknownHostException("Failed to determine LAN address: " + e);
+ unknownHostException.initCause(e);
+ throw unknownHostException;
+ }
+ }
+
+ /**
+ * 尝试端口时候被占用
+ *
+ * @param port 端口号
+ * @return 没有被占用:true,被占用:false
+ */
+ public static boolean tryPort(int port) {
+ try (ServerSocket ignore = new ServerSocket(port)) {
+ return true;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+}
diff --git a/blade-core-log/pom.xml b/blade-core-log/pom.xml
index 4b6af9e..9ccecf8 100644
--- a/blade-core-log/pom.xml
+++ b/blade-core-log/pom.xml
@@ -5,7 +5,7 @@