一尘不染

如何为所有控制器配置默认的@RestController URI前缀?

spring-boot

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

另外,我可以在Spring Boot的应用程序配置中添加一个附加上下文,如以下示例(在Groovy中),以便在根上下文的URL映射中添加“ / api”:

@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使用配置为所有人设置基本路径,而不必在每个控制器前加/ api
/前缀?如果我被迫手动为每个控制器添加URI前缀,则可能会错误地忽略该前缀并绕过我针对Web服务的安全措施。


阅读 723

收藏
2020-05-30

共1个答案

一尘不染

有人在Spring MVC
Jira中提出了一个问题,并提出了一个很好的解决方案,我现在正在使用它。这个想法是在每个RestController文件中放置的前缀中使用Spring
Expression Language,并在Spring Boot application.properties文件中引用单个属性。

这是问题的链接:https :
//jira.spring.io/browse/SPR-13882

2020-05-30