mirror of
				https://github.com/continew-org/continew-starter.git
				synced 2025-10-31 10:57:15 +08:00 
			
		
		
		
	refactor(web): 优化部分代码
This commit is contained in:
		| @@ -0,0 +1,63 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. | ||||||
|  |  * <p> | ||||||
|  |  * 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 | ||||||
|  |  * <p> | ||||||
|  |  * http://www.gnu.org/licenses/lgpl.html | ||||||
|  |  * <p> | ||||||
|  |  * 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 top.continew.starter.web.autoconfigure.server; | ||||||
|  |  | ||||||
|  | import org.springframework.boot.context.properties.ConfigurationProperties; | ||||||
|  |  | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 服务器配置属性 | ||||||
|  |  * | ||||||
|  |  * @author Charles7c | ||||||
|  |  * @since 2.11.0 | ||||||
|  |  */ | ||||||
|  | @ConfigurationProperties("server.extension") | ||||||
|  | public class ServerExtensionProperties { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 默认禁止三个不安全的 HTTP 方法(如 CONNECT、TRACE、TRACK) | ||||||
|  |      */ | ||||||
|  |     private static final List<String> DEFAULT_ALLOWED_METHODS = List.of("CONNECT", "TRACE", "TRACK"); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 是否启用跨域配置 | ||||||
|  |      */ | ||||||
|  |     private boolean enabled = true; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 不允许的请求方式 | ||||||
|  |      */ | ||||||
|  |     private List<String> disallowedMethods = new ArrayList<>(DEFAULT_ALLOWED_METHODS); | ||||||
|  |  | ||||||
|  |     public boolean isEnabled() { | ||||||
|  |         return enabled; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setEnabled(boolean enabled) { | ||||||
|  |         this.enabled = enabled; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public List<String> getDisallowedMethods() { | ||||||
|  |         return disallowedMethods; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setDisallowedMethods(List<String> disallowedMethods) { | ||||||
|  |         this.disallowedMethods = disallowedMethods; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -14,13 +14,15 @@ | |||||||
|  * limitations under the License. |  * limitations under the License. | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| package top.continew.starter.web.autoconfigure.container; | package top.continew.starter.web.autoconfigure.server; | ||||||
| 
 | 
 | ||||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||||
| import org.springframework.boot.autoconfigure.AutoConfiguration; | import org.springframework.boot.autoconfigure.AutoConfiguration; | ||||||
| import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; | import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; | ||||||
|  | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; | ||||||
| import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; | import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; | ||||||
|  | import org.springframework.boot.context.properties.EnableConfigurationProperties; | ||||||
| import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory; | import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory; | ||||||
| import org.springframework.boot.web.server.WebServerFactoryCustomizer; | import org.springframework.boot.web.server.WebServerFactoryCustomizer; | ||||||
| import org.springframework.context.annotation.Bean; | import org.springframework.context.annotation.Bean; | ||||||
| @@ -28,16 +30,22 @@ import org.springframework.context.annotation.Bean; | |||||||
| import io.undertow.Undertow; | import io.undertow.Undertow; | ||||||
| import io.undertow.server.handlers.DisallowedMethodsHandler; | import io.undertow.server.handlers.DisallowedMethodsHandler; | ||||||
| import io.undertow.util.HttpString; | import io.undertow.util.HttpString; | ||||||
|  | import top.continew.starter.core.constant.PropertiesConstants; | ||||||
|  | 
 | ||||||
|  | import java.util.stream.Collectors; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Undertow 自定义配置 |  * Undertow 自动配置 | ||||||
|  * |  * | ||||||
|  * @author Jasmine |  * @author Jasmine | ||||||
|  |  * @author Charles7c | ||||||
|  * @since 2.11.0 |  * @since 2.11.0 | ||||||
|  */ |  */ | ||||||
| @AutoConfiguration | @AutoConfiguration | ||||||
| @ConditionalOnWebApplication | @ConditionalOnWebApplication | ||||||
| @ConditionalOnClass(Undertow.class) | @ConditionalOnClass(Undertow.class) | ||||||
|  | @EnableConfigurationProperties(ServerExtensionProperties.class) | ||||||
|  | @ConditionalOnProperty(prefix = "server.extension", name = PropertiesConstants.ENABLED, havingValue = "true") | ||||||
| public class UndertowAutoConfiguration { | public class UndertowAutoConfiguration { | ||||||
| 
 | 
 | ||||||
|     private static final Logger log = LoggerFactory.getLogger(UndertowAutoConfiguration.class); |     private static final Logger log = LoggerFactory.getLogger(UndertowAutoConfiguration.class); | ||||||
| @@ -46,16 +54,17 @@ public class UndertowAutoConfiguration { | |||||||
|      * Undertow 自定义配置 |      * Undertow 自定义配置 | ||||||
|      */ |      */ | ||||||
|     @Bean |     @Bean | ||||||
|     public WebServerFactoryCustomizer<UndertowServletWebServerFactory> customize() { |     public WebServerFactoryCustomizer<UndertowServletWebServerFactory> customize(ServerExtensionProperties properties) { | ||||||
|         return factory -> { |         return factory -> { | ||||||
|             factory.addDeploymentInfoCustomizers(deploymentInfo -> deploymentInfo |             factory.addDeploymentInfoCustomizers(deploymentInfo -> deploymentInfo | ||||||
|                 .addInitialHandlerChainWrapper(handler -> { |                 .addInitialHandlerChainWrapper(handler -> new DisallowedMethodsHandler(handler, properties | ||||||
|                     // 禁止三个不安全的 HTTP 方法(如 CONNECT、TRACE、TRACK) |                     .getDisallowedMethods() | ||||||
|                     HttpString[] disallowedHttpMethods = {HttpString.tryFromString("CONNECT"), HttpString |                     .stream() | ||||||
|                         .tryFromString("TRACE"), HttpString.tryFromString("TRACK")}; |                     .map(HttpString::tryFromString) | ||||||
|                     return new DisallowedMethodsHandler(handler, disallowedHttpMethods); |                     .collect(Collectors.toSet())))); | ||||||
|                 })); |             log.debug("[ContiNew Starter] - Disallowed HTTP methods on Server Undertow: {}.", properties | ||||||
|             log.debug("[ContiNew Starter] - Auto Configuration 'Web-Undertow' completed initialization."); |                 .getDisallowedMethods()); | ||||||
|  |             log.debug("[ContiNew Starter] - Auto Configuration 'Web-Server Undertow' completed initialization."); | ||||||
|         }; |         }; | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @@ -1,3 +1,3 @@ | |||||||
| top.continew.starter.web.autoconfigure.mvc.WebMvcAutoConfiguration | top.continew.starter.web.autoconfigure.mvc.WebMvcAutoConfiguration | ||||||
| top.continew.starter.web.autoconfigure.cors.CorsAutoConfiguration | top.continew.starter.web.autoconfigure.cors.CorsAutoConfiguration | ||||||
| top.continew.starter.web.autoconfigure.container.UndertowAutoConfiguration | top.continew.starter.web.autoconfigure.server.UndertowAutoConfiguration | ||||||
		Reference in New Issue
	
	Block a user