[feat] 升级版本至3.6.5.0.4
parent
26cacd2cff
commit
46e1f34b3e
|
|
@ -1,11 +1,11 @@
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img alt="logo" src="https://oscimg.oschina.net/oscnet/up-b99b286755aef70355a7084753f89cdb7c9.png">
|
<img alt="logo" src="https://oscimg.oschina.net/oscnet/up-b99b286755aef70355a7084753f89cdb7c9.png">
|
||||||
</p>
|
</p>
|
||||||
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi v3.6.5.0.3</h1>
|
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi v3.6.5.0.4</h1>
|
||||||
<h4 align="center">基于 Vue/Element UI 和 Spring Boot/Spring Cloud & Alibaba 前后端分离的分布式微服务架构</h4>
|
<h4 align="center">基于 Vue/Element UI 和 Spring Boot/Spring Cloud & Alibaba 前后端分离的分布式微服务架构</h4>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://gitee.com/y_project/RuoYi-Cloud/stargazers"><img src="https://gitee.com/y_project/RuoYi-Cloud/badge/star.svg?theme=dark"></a>
|
<a href="https://gitee.com/y_project/RuoYi-Cloud/stargazers"><img src="https://gitee.com/y_project/RuoYi-Cloud/badge/star.svg?theme=dark"></a>
|
||||||
<a href="https://gitee.com/y_project/RuoYi-Cloud"><img src="https://img.shields.io/badge/RuoYi-v3.6.5.0.3-brightgreen.svg"></a>
|
<a href="https://gitee.com/y_project/RuoYi-Cloud"><img src="https://img.shields.io/badge/RuoYi-v3.6.5.0.4-brightgreen.svg"></a>
|
||||||
<a href="https://gitee.com/y_project/RuoYi-Cloud/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a>
|
<a href="https://gitee.com/y_project/RuoYi-Cloud/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
|
||||||
4
pom.xml
4
pom.xml
|
|
@ -6,14 +6,14 @@
|
||||||
|
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi</artifactId>
|
<artifactId>ruoyi</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
|
|
||||||
<name>ruoyi</name>
|
<name>ruoyi</name>
|
||||||
<url>http://www.ruoyi.vip</url>
|
<url>http://www.ruoyi.vip</url>
|
||||||
<description>若依微服务系统</description>
|
<description>若依微服务系统</description>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<ruoyi.version>3.6.5.0.3</ruoyi.version>
|
<ruoyi.version>3.6.5.0.4</ruoyi.version>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
<java.version>1.8</java.version>
|
<java.version>1.8</java.version>
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi</artifactId>
|
<artifactId>ruoyi</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi-api</artifactId>
|
<artifactId>ruoyi-api</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi</artifactId>
|
<artifactId>ruoyi</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,140 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2012-2021 the original author or authors.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
* https://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 org.springframework.boot.actuate.autoconfigure.endpoint.web;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration properties for web management endpoints.
|
||||||
|
*
|
||||||
|
* @author Madhura Bhave
|
||||||
|
* @author Phillip Webb
|
||||||
|
* @since 2.0.0
|
||||||
|
*/
|
||||||
|
@ConfigurationProperties(prefix = "management.endpoints.web")
|
||||||
|
public class WebEndpointProperties {
|
||||||
|
|
||||||
|
private final Exposure exposure = new Exposure();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base path for Web endpoints. Relative to the servlet context path
|
||||||
|
* (server.servlet.context-path) or WebFlux base path (spring.webflux.base-path) when
|
||||||
|
* the management server is sharing the main server port. Relative to the management
|
||||||
|
* server base path (management.server.base-path) when a separate management server
|
||||||
|
* port (management.server.port) is configured.
|
||||||
|
*/
|
||||||
|
private String basePath = "/actuator";
|
||||||
|
private String baseUrl = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mapping between endpoint IDs and the path that should expose them.
|
||||||
|
*/
|
||||||
|
private final Map<String, String> pathMapping = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
private final Discovery discovery = new Discovery();
|
||||||
|
|
||||||
|
public Exposure getExposure() {
|
||||||
|
return this.exposure;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBasePath() {
|
||||||
|
return this.basePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBasePath(String basePath) {
|
||||||
|
Assert.isTrue(basePath.isEmpty() || basePath.startsWith("/"), "Base path must start with '/' or be empty");
|
||||||
|
this.basePath = cleanBasePath(basePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBaseUrl() {
|
||||||
|
return baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBaseUrl(String baseUrl) {
|
||||||
|
this.baseUrl = baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String cleanBasePath(String basePath) {
|
||||||
|
if (StringUtils.hasText(basePath) && basePath.endsWith("/")) {
|
||||||
|
return basePath.substring(0, basePath.length() - 1);
|
||||||
|
}
|
||||||
|
return basePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, String> getPathMapping() {
|
||||||
|
return this.pathMapping;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Discovery getDiscovery() {
|
||||||
|
return this.discovery;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Exposure {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Endpoint IDs that should be included or '*' for all.
|
||||||
|
*/
|
||||||
|
private Set<String> include = new LinkedHashSet<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Endpoint IDs that should be excluded or '*' for all.
|
||||||
|
*/
|
||||||
|
private Set<String> exclude = new LinkedHashSet<>();
|
||||||
|
|
||||||
|
public Set<String> getInclude() {
|
||||||
|
return this.include;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInclude(Set<String> include) {
|
||||||
|
this.include = include;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> getExclude() {
|
||||||
|
return this.exclude;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExclude(Set<String> exclude) {
|
||||||
|
this.exclude = exclude;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Discovery {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the discovery page is enabled.
|
||||||
|
*/
|
||||||
|
private boolean enabled = true;
|
||||||
|
|
||||||
|
public boolean isEnabled() {
|
||||||
|
return this.enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnabled(boolean enabled) {
|
||||||
|
this.enabled = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,113 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2012-2021 the original author or authors.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
* https://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 org.springframework.boot.actuate.endpoint.web.servlet;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
|
||||||
|
import org.springframework.boot.actuate.endpoint.web.*;
|
||||||
|
import org.springframework.context.annotation.Lazy;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
import org.springframework.web.cors.CorsConfiguration;
|
||||||
|
import org.springframework.web.servlet.HandlerMapping;
|
||||||
|
import org.springframework.web.util.pattern.PathPatternParser;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A custom {@link HandlerMapping} that makes web endpoints available over HTTP using
|
||||||
|
* Spring MVC.
|
||||||
|
*
|
||||||
|
* @author Andy Wilkinson
|
||||||
|
* @author Phillip Webb
|
||||||
|
* @since 2.0.0
|
||||||
|
*/
|
||||||
|
public class WebMvcEndpointHandlerMapping extends AbstractWebMvcEndpointHandlerMapping {
|
||||||
|
|
||||||
|
private final EndpointLinksResolver linksResolver;
|
||||||
|
@Lazy
|
||||||
|
@Resource
|
||||||
|
private WebEndpointProperties webEndpointProperties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@code WebMvcEndpointHandlerMapping} instance that provides mappings
|
||||||
|
* for the given endpoints.
|
||||||
|
* @param endpointMapping the base mapping for all endpoints
|
||||||
|
* @param endpoints the web endpoints
|
||||||
|
* @param endpointMediaTypes media types consumed and produced by the endpoints
|
||||||
|
* @param corsConfiguration the CORS configuration for the endpoints or {@code null}
|
||||||
|
* @param linksResolver resolver for determining links to available endpoints
|
||||||
|
* @param shouldRegisterLinksMapping whether the links endpoint should be registered
|
||||||
|
*/
|
||||||
|
public WebMvcEndpointHandlerMapping(EndpointMapping endpointMapping, Collection<ExposableWebEndpoint> endpoints,
|
||||||
|
EndpointMediaTypes endpointMediaTypes, CorsConfiguration corsConfiguration,
|
||||||
|
EndpointLinksResolver linksResolver, boolean shouldRegisterLinksMapping) {
|
||||||
|
super(endpointMapping, endpoints, endpointMediaTypes, corsConfiguration, shouldRegisterLinksMapping);
|
||||||
|
this.linksResolver = linksResolver;
|
||||||
|
setOrder(-100);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@code WebMvcEndpointHandlerMapping} instance that provides mappings
|
||||||
|
* for the given endpoints.
|
||||||
|
* @param endpointMapping the base mapping for all endpoints
|
||||||
|
* @param endpoints the web endpoints
|
||||||
|
* @param endpointMediaTypes media types consumed and produced by the endpoints
|
||||||
|
* @param corsConfiguration the CORS configuration for the endpoints or {@code null}
|
||||||
|
* @param linksResolver resolver for determining links to available endpoints
|
||||||
|
* @param shouldRegisterLinksMapping whether the links endpoint should be registered
|
||||||
|
* @param pathPatternParser the path pattern parser
|
||||||
|
*/
|
||||||
|
public WebMvcEndpointHandlerMapping(EndpointMapping endpointMapping, Collection<ExposableWebEndpoint> endpoints,
|
||||||
|
EndpointMediaTypes endpointMediaTypes, CorsConfiguration corsConfiguration,
|
||||||
|
EndpointLinksResolver linksResolver, boolean shouldRegisterLinksMapping,
|
||||||
|
PathPatternParser pathPatternParser) {
|
||||||
|
super(endpointMapping, endpoints, endpointMediaTypes, corsConfiguration, shouldRegisterLinksMapping,
|
||||||
|
pathPatternParser);
|
||||||
|
this.linksResolver = linksResolver;
|
||||||
|
setOrder(-100);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected LinksHandler getLinksHandler() {
|
||||||
|
return new WebMvcLinksHandler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handler for root endpoint providing links.
|
||||||
|
*/
|
||||||
|
class WebMvcLinksHandler implements LinksHandler {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ResponseBody
|
||||||
|
public Map<String, Map<String, Link>> links(HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
return Collections.singletonMap("_links",
|
||||||
|
WebMvcEndpointHandlerMapping.this.linksResolver.resolveLinks(ObjectUtils.isEmpty(webEndpointProperties.getBaseUrl())?request.getRequestURL().toString():(webEndpointProperties.getBaseUrl()+webEndpointProperties.getBasePath())));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Actuator root web endpoint";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi</artifactId>
|
<artifactId>ruoyi</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi-common</artifactId>
|
<artifactId>ruoyi-common</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi-common</artifactId>
|
<artifactId>ruoyi-common</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi-common</artifactId>
|
<artifactId>ruoyi-common</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi-common</artifactId>
|
<artifactId>ruoyi-common</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi-common</artifactId>
|
<artifactId>ruoyi-common</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi-common</artifactId>
|
<artifactId>ruoyi-common</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi-common</artifactId>
|
<artifactId>ruoyi-common</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi-common</artifactId>
|
<artifactId>ruoyi-common</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi-common</artifactId>
|
<artifactId>ruoyi-common</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi</artifactId>
|
<artifactId>ruoyi</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
@ -104,6 +104,10 @@
|
||||||
<version>${springdoc.version}</version>
|
<version>${springdoc.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework</groupId>
|
||||||
|
<artifactId>spring-webmvc</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>de.codecentric</groupId>
|
<groupId>de.codecentric</groupId>
|
||||||
<artifactId>spring-boot-admin-starter-client</artifactId>
|
<artifactId>spring-boot-admin-starter-client</artifactId>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,140 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2012-2021 the original author or authors.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
* https://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 org.springframework.boot.actuate.autoconfigure.endpoint.web;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration properties for web management endpoints.
|
||||||
|
*
|
||||||
|
* @author Madhura Bhave
|
||||||
|
* @author Phillip Webb
|
||||||
|
* @since 2.0.0
|
||||||
|
*/
|
||||||
|
@ConfigurationProperties(prefix = "management.endpoints.web")
|
||||||
|
public class WebEndpointProperties {
|
||||||
|
|
||||||
|
private final Exposure exposure = new Exposure();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base path for Web endpoints. Relative to the servlet context path
|
||||||
|
* (server.servlet.context-path) or WebFlux base path (spring.webflux.base-path) when
|
||||||
|
* the management server is sharing the main server port. Relative to the management
|
||||||
|
* server base path (management.server.base-path) when a separate management server
|
||||||
|
* port (management.server.port) is configured.
|
||||||
|
*/
|
||||||
|
private String basePath = "/actuator";
|
||||||
|
private String baseUrl = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mapping between endpoint IDs and the path that should expose them.
|
||||||
|
*/
|
||||||
|
private final Map<String, String> pathMapping = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
private final Discovery discovery = new Discovery();
|
||||||
|
|
||||||
|
public Exposure getExposure() {
|
||||||
|
return this.exposure;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBasePath() {
|
||||||
|
return this.basePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBasePath(String basePath) {
|
||||||
|
Assert.isTrue(basePath.isEmpty() || basePath.startsWith("/"), "Base path must start with '/' or be empty");
|
||||||
|
this.basePath = cleanBasePath(basePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBaseUrl() {
|
||||||
|
return baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBaseUrl(String baseUrl) {
|
||||||
|
this.baseUrl = baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String cleanBasePath(String basePath) {
|
||||||
|
if (StringUtils.hasText(basePath) && basePath.endsWith("/")) {
|
||||||
|
return basePath.substring(0, basePath.length() - 1);
|
||||||
|
}
|
||||||
|
return basePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, String> getPathMapping() {
|
||||||
|
return this.pathMapping;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Discovery getDiscovery() {
|
||||||
|
return this.discovery;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Exposure {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Endpoint IDs that should be included or '*' for all.
|
||||||
|
*/
|
||||||
|
private Set<String> include = new LinkedHashSet<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Endpoint IDs that should be excluded or '*' for all.
|
||||||
|
*/
|
||||||
|
private Set<String> exclude = new LinkedHashSet<>();
|
||||||
|
|
||||||
|
public Set<String> getInclude() {
|
||||||
|
return this.include;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInclude(Set<String> include) {
|
||||||
|
this.include = include;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> getExclude() {
|
||||||
|
return this.exclude;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExclude(Set<String> exclude) {
|
||||||
|
this.exclude = exclude;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Discovery {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the discovery page is enabled.
|
||||||
|
*/
|
||||||
|
private boolean enabled = true;
|
||||||
|
|
||||||
|
public boolean isEnabled() {
|
||||||
|
return this.enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnabled(boolean enabled) {
|
||||||
|
this.enabled = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,113 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2012-2021 the original author or authors.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
* https://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 org.springframework.boot.actuate.endpoint.web.servlet;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
|
||||||
|
import org.springframework.boot.actuate.endpoint.web.*;
|
||||||
|
import org.springframework.context.annotation.Lazy;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
import org.springframework.web.cors.CorsConfiguration;
|
||||||
|
import org.springframework.web.servlet.HandlerMapping;
|
||||||
|
import org.springframework.web.util.pattern.PathPatternParser;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A custom {@link HandlerMapping} that makes web endpoints available over HTTP using
|
||||||
|
* Spring MVC.
|
||||||
|
*
|
||||||
|
* @author Andy Wilkinson
|
||||||
|
* @author Phillip Webb
|
||||||
|
* @since 2.0.0
|
||||||
|
*/
|
||||||
|
public class WebMvcEndpointHandlerMapping extends AbstractWebMvcEndpointHandlerMapping {
|
||||||
|
|
||||||
|
private final EndpointLinksResolver linksResolver;
|
||||||
|
@Lazy
|
||||||
|
@Resource
|
||||||
|
private WebEndpointProperties webEndpointProperties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@code WebMvcEndpointHandlerMapping} instance that provides mappings
|
||||||
|
* for the given endpoints.
|
||||||
|
* @param endpointMapping the base mapping for all endpoints
|
||||||
|
* @param endpoints the web endpoints
|
||||||
|
* @param endpointMediaTypes media types consumed and produced by the endpoints
|
||||||
|
* @param corsConfiguration the CORS configuration for the endpoints or {@code null}
|
||||||
|
* @param linksResolver resolver for determining links to available endpoints
|
||||||
|
* @param shouldRegisterLinksMapping whether the links endpoint should be registered
|
||||||
|
*/
|
||||||
|
public WebMvcEndpointHandlerMapping(EndpointMapping endpointMapping, Collection<ExposableWebEndpoint> endpoints,
|
||||||
|
EndpointMediaTypes endpointMediaTypes, CorsConfiguration corsConfiguration,
|
||||||
|
EndpointLinksResolver linksResolver, boolean shouldRegisterLinksMapping) {
|
||||||
|
super(endpointMapping, endpoints, endpointMediaTypes, corsConfiguration, shouldRegisterLinksMapping);
|
||||||
|
this.linksResolver = linksResolver;
|
||||||
|
setOrder(-100);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@code WebMvcEndpointHandlerMapping} instance that provides mappings
|
||||||
|
* for the given endpoints.
|
||||||
|
* @param endpointMapping the base mapping for all endpoints
|
||||||
|
* @param endpoints the web endpoints
|
||||||
|
* @param endpointMediaTypes media types consumed and produced by the endpoints
|
||||||
|
* @param corsConfiguration the CORS configuration for the endpoints or {@code null}
|
||||||
|
* @param linksResolver resolver for determining links to available endpoints
|
||||||
|
* @param shouldRegisterLinksMapping whether the links endpoint should be registered
|
||||||
|
* @param pathPatternParser the path pattern parser
|
||||||
|
*/
|
||||||
|
public WebMvcEndpointHandlerMapping(EndpointMapping endpointMapping, Collection<ExposableWebEndpoint> endpoints,
|
||||||
|
EndpointMediaTypes endpointMediaTypes, CorsConfiguration corsConfiguration,
|
||||||
|
EndpointLinksResolver linksResolver, boolean shouldRegisterLinksMapping,
|
||||||
|
PathPatternParser pathPatternParser) {
|
||||||
|
super(endpointMapping, endpoints, endpointMediaTypes, corsConfiguration, shouldRegisterLinksMapping,
|
||||||
|
pathPatternParser);
|
||||||
|
this.linksResolver = linksResolver;
|
||||||
|
setOrder(-100);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected LinksHandler getLinksHandler() {
|
||||||
|
return new WebMvcLinksHandler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handler for root endpoint providing links.
|
||||||
|
*/
|
||||||
|
class WebMvcLinksHandler implements LinksHandler {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ResponseBody
|
||||||
|
public Map<String, Map<String, Link>> links(HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
return Collections.singletonMap("_links",
|
||||||
|
WebMvcEndpointHandlerMapping.this.linksResolver.resolveLinks(ObjectUtils.isEmpty(webEndpointProperties.getBaseUrl())?request.getRequestURL().toString():(webEndpointProperties.getBaseUrl()+webEndpointProperties.getBasePath())));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Actuator root web endpoint";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi</artifactId>
|
<artifactId>ruoyi</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi-modules</artifactId>
|
<artifactId>ruoyi-modules</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,140 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2012-2021 the original author or authors.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
* https://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 org.springframework.boot.actuate.autoconfigure.endpoint.web;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration properties for web management endpoints.
|
||||||
|
*
|
||||||
|
* @author Madhura Bhave
|
||||||
|
* @author Phillip Webb
|
||||||
|
* @since 2.0.0
|
||||||
|
*/
|
||||||
|
@ConfigurationProperties(prefix = "management.endpoints.web")
|
||||||
|
public class WebEndpointProperties {
|
||||||
|
|
||||||
|
private final Exposure exposure = new Exposure();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base path for Web endpoints. Relative to the servlet context path
|
||||||
|
* (server.servlet.context-path) or WebFlux base path (spring.webflux.base-path) when
|
||||||
|
* the management server is sharing the main server port. Relative to the management
|
||||||
|
* server base path (management.server.base-path) when a separate management server
|
||||||
|
* port (management.server.port) is configured.
|
||||||
|
*/
|
||||||
|
private String basePath = "/actuator";
|
||||||
|
private String baseUrl = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mapping between endpoint IDs and the path that should expose them.
|
||||||
|
*/
|
||||||
|
private final Map<String, String> pathMapping = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
private final Discovery discovery = new Discovery();
|
||||||
|
|
||||||
|
public Exposure getExposure() {
|
||||||
|
return this.exposure;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBasePath() {
|
||||||
|
return this.basePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBasePath(String basePath) {
|
||||||
|
Assert.isTrue(basePath.isEmpty() || basePath.startsWith("/"), "Base path must start with '/' or be empty");
|
||||||
|
this.basePath = cleanBasePath(basePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBaseUrl() {
|
||||||
|
return baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBaseUrl(String baseUrl) {
|
||||||
|
this.baseUrl = baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String cleanBasePath(String basePath) {
|
||||||
|
if (StringUtils.hasText(basePath) && basePath.endsWith("/")) {
|
||||||
|
return basePath.substring(0, basePath.length() - 1);
|
||||||
|
}
|
||||||
|
return basePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, String> getPathMapping() {
|
||||||
|
return this.pathMapping;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Discovery getDiscovery() {
|
||||||
|
return this.discovery;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Exposure {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Endpoint IDs that should be included or '*' for all.
|
||||||
|
*/
|
||||||
|
private Set<String> include = new LinkedHashSet<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Endpoint IDs that should be excluded or '*' for all.
|
||||||
|
*/
|
||||||
|
private Set<String> exclude = new LinkedHashSet<>();
|
||||||
|
|
||||||
|
public Set<String> getInclude() {
|
||||||
|
return this.include;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInclude(Set<String> include) {
|
||||||
|
this.include = include;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> getExclude() {
|
||||||
|
return this.exclude;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExclude(Set<String> exclude) {
|
||||||
|
this.exclude = exclude;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Discovery {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the discovery page is enabled.
|
||||||
|
*/
|
||||||
|
private boolean enabled = true;
|
||||||
|
|
||||||
|
public boolean isEnabled() {
|
||||||
|
return this.enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnabled(boolean enabled) {
|
||||||
|
this.enabled = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,113 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2012-2021 the original author or authors.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
* https://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 org.springframework.boot.actuate.endpoint.web.servlet;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
|
||||||
|
import org.springframework.boot.actuate.endpoint.web.*;
|
||||||
|
import org.springframework.context.annotation.Lazy;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
import org.springframework.web.cors.CorsConfiguration;
|
||||||
|
import org.springframework.web.servlet.HandlerMapping;
|
||||||
|
import org.springframework.web.util.pattern.PathPatternParser;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A custom {@link HandlerMapping} that makes web endpoints available over HTTP using
|
||||||
|
* Spring MVC.
|
||||||
|
*
|
||||||
|
* @author Andy Wilkinson
|
||||||
|
* @author Phillip Webb
|
||||||
|
* @since 2.0.0
|
||||||
|
*/
|
||||||
|
public class WebMvcEndpointHandlerMapping extends AbstractWebMvcEndpointHandlerMapping {
|
||||||
|
|
||||||
|
private final EndpointLinksResolver linksResolver;
|
||||||
|
@Lazy
|
||||||
|
@Resource
|
||||||
|
private WebEndpointProperties webEndpointProperties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@code WebMvcEndpointHandlerMapping} instance that provides mappings
|
||||||
|
* for the given endpoints.
|
||||||
|
* @param endpointMapping the base mapping for all endpoints
|
||||||
|
* @param endpoints the web endpoints
|
||||||
|
* @param endpointMediaTypes media types consumed and produced by the endpoints
|
||||||
|
* @param corsConfiguration the CORS configuration for the endpoints or {@code null}
|
||||||
|
* @param linksResolver resolver for determining links to available endpoints
|
||||||
|
* @param shouldRegisterLinksMapping whether the links endpoint should be registered
|
||||||
|
*/
|
||||||
|
public WebMvcEndpointHandlerMapping(EndpointMapping endpointMapping, Collection<ExposableWebEndpoint> endpoints,
|
||||||
|
EndpointMediaTypes endpointMediaTypes, CorsConfiguration corsConfiguration,
|
||||||
|
EndpointLinksResolver linksResolver, boolean shouldRegisterLinksMapping) {
|
||||||
|
super(endpointMapping, endpoints, endpointMediaTypes, corsConfiguration, shouldRegisterLinksMapping);
|
||||||
|
this.linksResolver = linksResolver;
|
||||||
|
setOrder(-100);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@code WebMvcEndpointHandlerMapping} instance that provides mappings
|
||||||
|
* for the given endpoints.
|
||||||
|
* @param endpointMapping the base mapping for all endpoints
|
||||||
|
* @param endpoints the web endpoints
|
||||||
|
* @param endpointMediaTypes media types consumed and produced by the endpoints
|
||||||
|
* @param corsConfiguration the CORS configuration for the endpoints or {@code null}
|
||||||
|
* @param linksResolver resolver for determining links to available endpoints
|
||||||
|
* @param shouldRegisterLinksMapping whether the links endpoint should be registered
|
||||||
|
* @param pathPatternParser the path pattern parser
|
||||||
|
*/
|
||||||
|
public WebMvcEndpointHandlerMapping(EndpointMapping endpointMapping, Collection<ExposableWebEndpoint> endpoints,
|
||||||
|
EndpointMediaTypes endpointMediaTypes, CorsConfiguration corsConfiguration,
|
||||||
|
EndpointLinksResolver linksResolver, boolean shouldRegisterLinksMapping,
|
||||||
|
PathPatternParser pathPatternParser) {
|
||||||
|
super(endpointMapping, endpoints, endpointMediaTypes, corsConfiguration, shouldRegisterLinksMapping,
|
||||||
|
pathPatternParser);
|
||||||
|
this.linksResolver = linksResolver;
|
||||||
|
setOrder(-100);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected LinksHandler getLinksHandler() {
|
||||||
|
return new WebMvcLinksHandler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handler for root endpoint providing links.
|
||||||
|
*/
|
||||||
|
class WebMvcLinksHandler implements LinksHandler {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ResponseBody
|
||||||
|
public Map<String, Map<String, Link>> links(HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
return Collections.singletonMap("_links",
|
||||||
|
WebMvcEndpointHandlerMapping.this.linksResolver.resolveLinks(ObjectUtils.isEmpty(webEndpointProperties.getBaseUrl())?request.getRequestURL().toString():(webEndpointProperties.getBaseUrl()+webEndpointProperties.getBasePath())));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Actuator root web endpoint";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi-modules</artifactId>
|
<artifactId>ruoyi-modules</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,140 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2012-2021 the original author or authors.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
* https://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 org.springframework.boot.actuate.autoconfigure.endpoint.web;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration properties for web management endpoints.
|
||||||
|
*
|
||||||
|
* @author Madhura Bhave
|
||||||
|
* @author Phillip Webb
|
||||||
|
* @since 2.0.0
|
||||||
|
*/
|
||||||
|
@ConfigurationProperties(prefix = "management.endpoints.web")
|
||||||
|
public class WebEndpointProperties {
|
||||||
|
|
||||||
|
private final Exposure exposure = new Exposure();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base path for Web endpoints. Relative to the servlet context path
|
||||||
|
* (server.servlet.context-path) or WebFlux base path (spring.webflux.base-path) when
|
||||||
|
* the management server is sharing the main server port. Relative to the management
|
||||||
|
* server base path (management.server.base-path) when a separate management server
|
||||||
|
* port (management.server.port) is configured.
|
||||||
|
*/
|
||||||
|
private String basePath = "/actuator";
|
||||||
|
private String baseUrl = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mapping between endpoint IDs and the path that should expose them.
|
||||||
|
*/
|
||||||
|
private final Map<String, String> pathMapping = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
private final Discovery discovery = new Discovery();
|
||||||
|
|
||||||
|
public Exposure getExposure() {
|
||||||
|
return this.exposure;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBasePath() {
|
||||||
|
return this.basePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBasePath(String basePath) {
|
||||||
|
Assert.isTrue(basePath.isEmpty() || basePath.startsWith("/"), "Base path must start with '/' or be empty");
|
||||||
|
this.basePath = cleanBasePath(basePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBaseUrl() {
|
||||||
|
return baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBaseUrl(String baseUrl) {
|
||||||
|
this.baseUrl = baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String cleanBasePath(String basePath) {
|
||||||
|
if (StringUtils.hasText(basePath) && basePath.endsWith("/")) {
|
||||||
|
return basePath.substring(0, basePath.length() - 1);
|
||||||
|
}
|
||||||
|
return basePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, String> getPathMapping() {
|
||||||
|
return this.pathMapping;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Discovery getDiscovery() {
|
||||||
|
return this.discovery;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Exposure {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Endpoint IDs that should be included or '*' for all.
|
||||||
|
*/
|
||||||
|
private Set<String> include = new LinkedHashSet<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Endpoint IDs that should be excluded or '*' for all.
|
||||||
|
*/
|
||||||
|
private Set<String> exclude = new LinkedHashSet<>();
|
||||||
|
|
||||||
|
public Set<String> getInclude() {
|
||||||
|
return this.include;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInclude(Set<String> include) {
|
||||||
|
this.include = include;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> getExclude() {
|
||||||
|
return this.exclude;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExclude(Set<String> exclude) {
|
||||||
|
this.exclude = exclude;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Discovery {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the discovery page is enabled.
|
||||||
|
*/
|
||||||
|
private boolean enabled = true;
|
||||||
|
|
||||||
|
public boolean isEnabled() {
|
||||||
|
return this.enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnabled(boolean enabled) {
|
||||||
|
this.enabled = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,113 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2012-2021 the original author or authors.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
* https://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 org.springframework.boot.actuate.endpoint.web.servlet;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
|
||||||
|
import org.springframework.boot.actuate.endpoint.web.*;
|
||||||
|
import org.springframework.context.annotation.Lazy;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
import org.springframework.web.cors.CorsConfiguration;
|
||||||
|
import org.springframework.web.servlet.HandlerMapping;
|
||||||
|
import org.springframework.web.util.pattern.PathPatternParser;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A custom {@link HandlerMapping} that makes web endpoints available over HTTP using
|
||||||
|
* Spring MVC.
|
||||||
|
*
|
||||||
|
* @author Andy Wilkinson
|
||||||
|
* @author Phillip Webb
|
||||||
|
* @since 2.0.0
|
||||||
|
*/
|
||||||
|
public class WebMvcEndpointHandlerMapping extends AbstractWebMvcEndpointHandlerMapping {
|
||||||
|
|
||||||
|
private final EndpointLinksResolver linksResolver;
|
||||||
|
@Lazy
|
||||||
|
@Resource
|
||||||
|
private WebEndpointProperties webEndpointProperties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@code WebMvcEndpointHandlerMapping} instance that provides mappings
|
||||||
|
* for the given endpoints.
|
||||||
|
* @param endpointMapping the base mapping for all endpoints
|
||||||
|
* @param endpoints the web endpoints
|
||||||
|
* @param endpointMediaTypes media types consumed and produced by the endpoints
|
||||||
|
* @param corsConfiguration the CORS configuration for the endpoints or {@code null}
|
||||||
|
* @param linksResolver resolver for determining links to available endpoints
|
||||||
|
* @param shouldRegisterLinksMapping whether the links endpoint should be registered
|
||||||
|
*/
|
||||||
|
public WebMvcEndpointHandlerMapping(EndpointMapping endpointMapping, Collection<ExposableWebEndpoint> endpoints,
|
||||||
|
EndpointMediaTypes endpointMediaTypes, CorsConfiguration corsConfiguration,
|
||||||
|
EndpointLinksResolver linksResolver, boolean shouldRegisterLinksMapping) {
|
||||||
|
super(endpointMapping, endpoints, endpointMediaTypes, corsConfiguration, shouldRegisterLinksMapping);
|
||||||
|
this.linksResolver = linksResolver;
|
||||||
|
setOrder(-100);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@code WebMvcEndpointHandlerMapping} instance that provides mappings
|
||||||
|
* for the given endpoints.
|
||||||
|
* @param endpointMapping the base mapping for all endpoints
|
||||||
|
* @param endpoints the web endpoints
|
||||||
|
* @param endpointMediaTypes media types consumed and produced by the endpoints
|
||||||
|
* @param corsConfiguration the CORS configuration for the endpoints or {@code null}
|
||||||
|
* @param linksResolver resolver for determining links to available endpoints
|
||||||
|
* @param shouldRegisterLinksMapping whether the links endpoint should be registered
|
||||||
|
* @param pathPatternParser the path pattern parser
|
||||||
|
*/
|
||||||
|
public WebMvcEndpointHandlerMapping(EndpointMapping endpointMapping, Collection<ExposableWebEndpoint> endpoints,
|
||||||
|
EndpointMediaTypes endpointMediaTypes, CorsConfiguration corsConfiguration,
|
||||||
|
EndpointLinksResolver linksResolver, boolean shouldRegisterLinksMapping,
|
||||||
|
PathPatternParser pathPatternParser) {
|
||||||
|
super(endpointMapping, endpoints, endpointMediaTypes, corsConfiguration, shouldRegisterLinksMapping,
|
||||||
|
pathPatternParser);
|
||||||
|
this.linksResolver = linksResolver;
|
||||||
|
setOrder(-100);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected LinksHandler getLinksHandler() {
|
||||||
|
return new WebMvcLinksHandler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handler for root endpoint providing links.
|
||||||
|
*/
|
||||||
|
class WebMvcLinksHandler implements LinksHandler {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ResponseBody
|
||||||
|
public Map<String, Map<String, Link>> links(HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
return Collections.singletonMap("_links",
|
||||||
|
WebMvcEndpointHandlerMapping.this.linksResolver.resolveLinks(ObjectUtils.isEmpty(webEndpointProperties.getBaseUrl())?request.getRequestURL().toString():(webEndpointProperties.getBaseUrl()+webEndpointProperties.getBasePath())));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Actuator root web endpoint";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi-modules</artifactId>
|
<artifactId>ruoyi-modules</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,140 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2012-2021 the original author or authors.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
* https://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 org.springframework.boot.actuate.autoconfigure.endpoint.web;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration properties for web management endpoints.
|
||||||
|
*
|
||||||
|
* @author Madhura Bhave
|
||||||
|
* @author Phillip Webb
|
||||||
|
* @since 2.0.0
|
||||||
|
*/
|
||||||
|
@ConfigurationProperties(prefix = "management.endpoints.web")
|
||||||
|
public class WebEndpointProperties {
|
||||||
|
|
||||||
|
private final Exposure exposure = new Exposure();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base path for Web endpoints. Relative to the servlet context path
|
||||||
|
* (server.servlet.context-path) or WebFlux base path (spring.webflux.base-path) when
|
||||||
|
* the management server is sharing the main server port. Relative to the management
|
||||||
|
* server base path (management.server.base-path) when a separate management server
|
||||||
|
* port (management.server.port) is configured.
|
||||||
|
*/
|
||||||
|
private String basePath = "/actuator";
|
||||||
|
private String baseUrl = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mapping between endpoint IDs and the path that should expose them.
|
||||||
|
*/
|
||||||
|
private final Map<String, String> pathMapping = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
private final Discovery discovery = new Discovery();
|
||||||
|
|
||||||
|
public Exposure getExposure() {
|
||||||
|
return this.exposure;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBasePath() {
|
||||||
|
return this.basePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBasePath(String basePath) {
|
||||||
|
Assert.isTrue(basePath.isEmpty() || basePath.startsWith("/"), "Base path must start with '/' or be empty");
|
||||||
|
this.basePath = cleanBasePath(basePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBaseUrl() {
|
||||||
|
return baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBaseUrl(String baseUrl) {
|
||||||
|
this.baseUrl = baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String cleanBasePath(String basePath) {
|
||||||
|
if (StringUtils.hasText(basePath) && basePath.endsWith("/")) {
|
||||||
|
return basePath.substring(0, basePath.length() - 1);
|
||||||
|
}
|
||||||
|
return basePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, String> getPathMapping() {
|
||||||
|
return this.pathMapping;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Discovery getDiscovery() {
|
||||||
|
return this.discovery;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Exposure {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Endpoint IDs that should be included or '*' for all.
|
||||||
|
*/
|
||||||
|
private Set<String> include = new LinkedHashSet<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Endpoint IDs that should be excluded or '*' for all.
|
||||||
|
*/
|
||||||
|
private Set<String> exclude = new LinkedHashSet<>();
|
||||||
|
|
||||||
|
public Set<String> getInclude() {
|
||||||
|
return this.include;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInclude(Set<String> include) {
|
||||||
|
this.include = include;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> getExclude() {
|
||||||
|
return this.exclude;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExclude(Set<String> exclude) {
|
||||||
|
this.exclude = exclude;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Discovery {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the discovery page is enabled.
|
||||||
|
*/
|
||||||
|
private boolean enabled = true;
|
||||||
|
|
||||||
|
public boolean isEnabled() {
|
||||||
|
return this.enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnabled(boolean enabled) {
|
||||||
|
this.enabled = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,113 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2012-2021 the original author or authors.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
* https://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 org.springframework.boot.actuate.endpoint.web.servlet;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
|
||||||
|
import org.springframework.boot.actuate.endpoint.web.*;
|
||||||
|
import org.springframework.context.annotation.Lazy;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
import org.springframework.web.cors.CorsConfiguration;
|
||||||
|
import org.springframework.web.servlet.HandlerMapping;
|
||||||
|
import org.springframework.web.util.pattern.PathPatternParser;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A custom {@link HandlerMapping} that makes web endpoints available over HTTP using
|
||||||
|
* Spring MVC.
|
||||||
|
*
|
||||||
|
* @author Andy Wilkinson
|
||||||
|
* @author Phillip Webb
|
||||||
|
* @since 2.0.0
|
||||||
|
*/
|
||||||
|
public class WebMvcEndpointHandlerMapping extends AbstractWebMvcEndpointHandlerMapping {
|
||||||
|
|
||||||
|
private final EndpointLinksResolver linksResolver;
|
||||||
|
@Lazy
|
||||||
|
@Resource
|
||||||
|
private WebEndpointProperties webEndpointProperties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@code WebMvcEndpointHandlerMapping} instance that provides mappings
|
||||||
|
* for the given endpoints.
|
||||||
|
* @param endpointMapping the base mapping for all endpoints
|
||||||
|
* @param endpoints the web endpoints
|
||||||
|
* @param endpointMediaTypes media types consumed and produced by the endpoints
|
||||||
|
* @param corsConfiguration the CORS configuration for the endpoints or {@code null}
|
||||||
|
* @param linksResolver resolver for determining links to available endpoints
|
||||||
|
* @param shouldRegisterLinksMapping whether the links endpoint should be registered
|
||||||
|
*/
|
||||||
|
public WebMvcEndpointHandlerMapping(EndpointMapping endpointMapping, Collection<ExposableWebEndpoint> endpoints,
|
||||||
|
EndpointMediaTypes endpointMediaTypes, CorsConfiguration corsConfiguration,
|
||||||
|
EndpointLinksResolver linksResolver, boolean shouldRegisterLinksMapping) {
|
||||||
|
super(endpointMapping, endpoints, endpointMediaTypes, corsConfiguration, shouldRegisterLinksMapping);
|
||||||
|
this.linksResolver = linksResolver;
|
||||||
|
setOrder(-100);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@code WebMvcEndpointHandlerMapping} instance that provides mappings
|
||||||
|
* for the given endpoints.
|
||||||
|
* @param endpointMapping the base mapping for all endpoints
|
||||||
|
* @param endpoints the web endpoints
|
||||||
|
* @param endpointMediaTypes media types consumed and produced by the endpoints
|
||||||
|
* @param corsConfiguration the CORS configuration for the endpoints or {@code null}
|
||||||
|
* @param linksResolver resolver for determining links to available endpoints
|
||||||
|
* @param shouldRegisterLinksMapping whether the links endpoint should be registered
|
||||||
|
* @param pathPatternParser the path pattern parser
|
||||||
|
*/
|
||||||
|
public WebMvcEndpointHandlerMapping(EndpointMapping endpointMapping, Collection<ExposableWebEndpoint> endpoints,
|
||||||
|
EndpointMediaTypes endpointMediaTypes, CorsConfiguration corsConfiguration,
|
||||||
|
EndpointLinksResolver linksResolver, boolean shouldRegisterLinksMapping,
|
||||||
|
PathPatternParser pathPatternParser) {
|
||||||
|
super(endpointMapping, endpoints, endpointMediaTypes, corsConfiguration, shouldRegisterLinksMapping,
|
||||||
|
pathPatternParser);
|
||||||
|
this.linksResolver = linksResolver;
|
||||||
|
setOrder(-100);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected LinksHandler getLinksHandler() {
|
||||||
|
return new WebMvcLinksHandler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handler for root endpoint providing links.
|
||||||
|
*/
|
||||||
|
class WebMvcLinksHandler implements LinksHandler {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ResponseBody
|
||||||
|
public Map<String, Map<String, Link>> links(HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
return Collections.singletonMap("_links",
|
||||||
|
WebMvcEndpointHandlerMapping.this.linksResolver.resolveLinks(ObjectUtils.isEmpty(webEndpointProperties.getBaseUrl())?request.getRequestURL().toString():(webEndpointProperties.getBaseUrl()+webEndpointProperties.getBasePath())));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Actuator root web endpoint";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi-modules</artifactId>
|
<artifactId>ruoyi-modules</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,140 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2012-2021 the original author or authors.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
* https://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 org.springframework.boot.actuate.autoconfigure.endpoint.web;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration properties for web management endpoints.
|
||||||
|
*
|
||||||
|
* @author Madhura Bhave
|
||||||
|
* @author Phillip Webb
|
||||||
|
* @since 2.0.0
|
||||||
|
*/
|
||||||
|
@ConfigurationProperties(prefix = "management.endpoints.web")
|
||||||
|
public class WebEndpointProperties {
|
||||||
|
|
||||||
|
private final Exposure exposure = new Exposure();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base path for Web endpoints. Relative to the servlet context path
|
||||||
|
* (server.servlet.context-path) or WebFlux base path (spring.webflux.base-path) when
|
||||||
|
* the management server is sharing the main server port. Relative to the management
|
||||||
|
* server base path (management.server.base-path) when a separate management server
|
||||||
|
* port (management.server.port) is configured.
|
||||||
|
*/
|
||||||
|
private String basePath = "/actuator";
|
||||||
|
private String baseUrl = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mapping between endpoint IDs and the path that should expose them.
|
||||||
|
*/
|
||||||
|
private final Map<String, String> pathMapping = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
private final Discovery discovery = new Discovery();
|
||||||
|
|
||||||
|
public Exposure getExposure() {
|
||||||
|
return this.exposure;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBasePath() {
|
||||||
|
return this.basePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBasePath(String basePath) {
|
||||||
|
Assert.isTrue(basePath.isEmpty() || basePath.startsWith("/"), "Base path must start with '/' or be empty");
|
||||||
|
this.basePath = cleanBasePath(basePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBaseUrl() {
|
||||||
|
return baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBaseUrl(String baseUrl) {
|
||||||
|
this.baseUrl = baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String cleanBasePath(String basePath) {
|
||||||
|
if (StringUtils.hasText(basePath) && basePath.endsWith("/")) {
|
||||||
|
return basePath.substring(0, basePath.length() - 1);
|
||||||
|
}
|
||||||
|
return basePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, String> getPathMapping() {
|
||||||
|
return this.pathMapping;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Discovery getDiscovery() {
|
||||||
|
return this.discovery;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Exposure {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Endpoint IDs that should be included or '*' for all.
|
||||||
|
*/
|
||||||
|
private Set<String> include = new LinkedHashSet<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Endpoint IDs that should be excluded or '*' for all.
|
||||||
|
*/
|
||||||
|
private Set<String> exclude = new LinkedHashSet<>();
|
||||||
|
|
||||||
|
public Set<String> getInclude() {
|
||||||
|
return this.include;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInclude(Set<String> include) {
|
||||||
|
this.include = include;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> getExclude() {
|
||||||
|
return this.exclude;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExclude(Set<String> exclude) {
|
||||||
|
this.exclude = exclude;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Discovery {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the discovery page is enabled.
|
||||||
|
*/
|
||||||
|
private boolean enabled = true;
|
||||||
|
|
||||||
|
public boolean isEnabled() {
|
||||||
|
return this.enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnabled(boolean enabled) {
|
||||||
|
this.enabled = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,113 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2012-2021 the original author or authors.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
* https://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 org.springframework.boot.actuate.endpoint.web.servlet;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
|
||||||
|
import org.springframework.boot.actuate.endpoint.web.*;
|
||||||
|
import org.springframework.context.annotation.Lazy;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
import org.springframework.web.cors.CorsConfiguration;
|
||||||
|
import org.springframework.web.servlet.HandlerMapping;
|
||||||
|
import org.springframework.web.util.pattern.PathPatternParser;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A custom {@link HandlerMapping} that makes web endpoints available over HTTP using
|
||||||
|
* Spring MVC.
|
||||||
|
*
|
||||||
|
* @author Andy Wilkinson
|
||||||
|
* @author Phillip Webb
|
||||||
|
* @since 2.0.0
|
||||||
|
*/
|
||||||
|
public class WebMvcEndpointHandlerMapping extends AbstractWebMvcEndpointHandlerMapping {
|
||||||
|
|
||||||
|
private final EndpointLinksResolver linksResolver;
|
||||||
|
@Lazy
|
||||||
|
@Resource
|
||||||
|
private WebEndpointProperties webEndpointProperties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@code WebMvcEndpointHandlerMapping} instance that provides mappings
|
||||||
|
* for the given endpoints.
|
||||||
|
* @param endpointMapping the base mapping for all endpoints
|
||||||
|
* @param endpoints the web endpoints
|
||||||
|
* @param endpointMediaTypes media types consumed and produced by the endpoints
|
||||||
|
* @param corsConfiguration the CORS configuration for the endpoints or {@code null}
|
||||||
|
* @param linksResolver resolver for determining links to available endpoints
|
||||||
|
* @param shouldRegisterLinksMapping whether the links endpoint should be registered
|
||||||
|
*/
|
||||||
|
public WebMvcEndpointHandlerMapping(EndpointMapping endpointMapping, Collection<ExposableWebEndpoint> endpoints,
|
||||||
|
EndpointMediaTypes endpointMediaTypes, CorsConfiguration corsConfiguration,
|
||||||
|
EndpointLinksResolver linksResolver, boolean shouldRegisterLinksMapping) {
|
||||||
|
super(endpointMapping, endpoints, endpointMediaTypes, corsConfiguration, shouldRegisterLinksMapping);
|
||||||
|
this.linksResolver = linksResolver;
|
||||||
|
setOrder(-100);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@code WebMvcEndpointHandlerMapping} instance that provides mappings
|
||||||
|
* for the given endpoints.
|
||||||
|
* @param endpointMapping the base mapping for all endpoints
|
||||||
|
* @param endpoints the web endpoints
|
||||||
|
* @param endpointMediaTypes media types consumed and produced by the endpoints
|
||||||
|
* @param corsConfiguration the CORS configuration for the endpoints or {@code null}
|
||||||
|
* @param linksResolver resolver for determining links to available endpoints
|
||||||
|
* @param shouldRegisterLinksMapping whether the links endpoint should be registered
|
||||||
|
* @param pathPatternParser the path pattern parser
|
||||||
|
*/
|
||||||
|
public WebMvcEndpointHandlerMapping(EndpointMapping endpointMapping, Collection<ExposableWebEndpoint> endpoints,
|
||||||
|
EndpointMediaTypes endpointMediaTypes, CorsConfiguration corsConfiguration,
|
||||||
|
EndpointLinksResolver linksResolver, boolean shouldRegisterLinksMapping,
|
||||||
|
PathPatternParser pathPatternParser) {
|
||||||
|
super(endpointMapping, endpoints, endpointMediaTypes, corsConfiguration, shouldRegisterLinksMapping,
|
||||||
|
pathPatternParser);
|
||||||
|
this.linksResolver = linksResolver;
|
||||||
|
setOrder(-100);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected LinksHandler getLinksHandler() {
|
||||||
|
return new WebMvcLinksHandler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handler for root endpoint providing links.
|
||||||
|
*/
|
||||||
|
class WebMvcLinksHandler implements LinksHandler {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ResponseBody
|
||||||
|
public Map<String, Map<String, Link>> links(HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
return Collections.singletonMap("_links",
|
||||||
|
WebMvcEndpointHandlerMapping.this.linksResolver.resolveLinks(ObjectUtils.isEmpty(webEndpointProperties.getBaseUrl())?request.getRequestURL().toString():(webEndpointProperties.getBaseUrl()+webEndpointProperties.getBasePath())));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Actuator root web endpoint";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "ruoyi",
|
"name": "ruoyi",
|
||||||
"version": "3.6.5.0.3",
|
"version": "3.6.5.0.4",
|
||||||
"description": "若依管理系统",
|
"description": "若依管理系统",
|
||||||
"author": "若依",
|
"author": "若依",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|
|
||||||
|
|
@ -145,7 +145,7 @@
|
||||||
<span>更新日志</span>
|
<span>更新日志</span>
|
||||||
</div>
|
</div>
|
||||||
<el-collapse accordion>
|
<el-collapse accordion>
|
||||||
<el-collapse-item title="v3.6.5.0.3 - 2024-11-13">
|
<el-collapse-item title="v3.6.5.0.4 - 2024-11-13">
|
||||||
<ol>
|
<ol>
|
||||||
<li>使用SpringDoc代替Swagger</li>
|
<li>使用SpringDoc代替Swagger</li>
|
||||||
<li>菜单管理新增路由名称</li>
|
<li>菜单管理新增路由名称</li>
|
||||||
|
|
@ -946,7 +946,7 @@ export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
// 版本号
|
// 版本号
|
||||||
version: "3.6.5.0.3",
|
version: "3.6.5.0.4",
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi</artifactId>
|
<artifactId>ruoyi</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi-visual</artifactId>
|
<artifactId>ruoyi-visual</artifactId>
|
||||||
<version>3.6.5.0.3</version>
|
<version>3.6.5.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue