gpt4 book ai didi

java - 如何为所有 Controller 配置默认的@RestController URI 前缀?

转载 作者:搜寻专家 更新时间:2023-10-30 21:02:18 24 4
gpt4 key购买 nike

我知道您可以在 application.properties 中设置 server.contextPath 来更改根上下文。

此外,我可以在 Spring Boot 的应用程序配置中添加额外的上下文,如下例(在 Groovy 中)将“/api”添加到根上下文的 URL 映射:

@Bean
ServletRegistrationBean dispatcherServlet() {
ServletRegistrationBean reg = new ServletRegistrationBean(new DispatcherServlet(), "/")
reg.name = "dispatcherServlet"
reg.addInitParameter("contextConfigLocation", "")
reg.addUrlMappings("/api/*")
reg.loadOnStartup = 2
reg
}
}

我正在尝试有一个专门用于 Web 服务调用的单独的基本 URI“/api”,我可以利用它来实现安全性等。但是,使用上述方法将意味着我的任何 URI,无论是否为 Web 服务,都可以可以通过“/”或“/api”访问,并且不提供具体的隔离。

有没有人知道使用配置为所有 @RestController(s) 设置基本路径的更好方法,而不必为每个 Controller 正式添加/api/前缀?如果我被迫为每个 Controller 手动添加 URI 前缀,则可能会错误地忽略它并绕过我的特定于 Web 服务的安全措施。

这是 Stack Overflow 中对同一类型问题的引用,该问题从未得到完整回答:

Spring Boot: Configure a url prefix for RestControllers

最佳答案

继续当前接受的解决方案 github issue地址相同。

Spring 5.1 及更高版本你可以实现 WebMvcConfigurer 并覆盖 configurePathMatch 方法,如下所示

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.addPathPrefix("/api",
HandlerTypePredicate.forAnnotation(RestController.class));
}

}

现在所有的 @RestControllers 都会有 /api 作为配置路径的前缀路径。

Official Documentation

关于java - 如何为所有 Controller 配置默认的@RestController URI 前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34801351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com