我有一个简单的Spring Boot Web应用程序配置@EnableAuthorizationServer.它配置了server.context-path=/uaa,一切都按预期工作.
但是,当我点击URL上的应用程序时http://localhost,我得到了404.我想将这些请求重定向到http://localhost/uaa.
我尝试创建一个过滤器,但即使它被初始化,它也永远不会被调用.
我也试过覆盖EmbeddedServletContainerCustomizer但是如果我在/uaa上下文中击中404,似乎只会被调用.
实现从/(http://localhost/)到/uaa(http://localhost/uaa)的重定向的正确方法是什么?
有可能以某种方式使用RewriteValve自定义嵌入式tomcat 吗?正如我在api中看到的那样,目前只有addContextValves和addEngineValves的方法,但是在文档中作为尖头tomcat,RewriteValve应该放在Host或webapp的context.xml中.我不明白是否addContextValves可以为此工作.
谢谢
关于添加多个 tomcat 连接器并将它们绑定到每个单独的控制器的能力有一个很好的问题。
安迪威尔金森的好答案的本质在这里:
public static void main(String[] args) {
SpringApplicationBuilder parentBuilder
= new SpringApplicationBuilder(ApplicationConfiguration.class);
parentBuilder.child(ServiceOneConfiguration.class)
.properties("server.port:8080").run(args);
parentBuilder.child(ServiceTwoConfiguration.class)
.properties("server.port:8081").run(args);
}
Run Code Online (Sandbox Code Playgroud)
我想继续讨论另一个问题:
有没有办法让每个子应用程序上下文在支持所有标准 spring-boot 的功能(如配置文件后缀文件名等)的情况下读取一些特定于子应用程序的属性。
拥有三个独立的属性文件:
application.propertieschild1.propertieschild2.properties并且能够为每个上下文设置一个文件。
但对我来说重要的是,它们必须支持所有 spring-boot 魔法。例如,如果我像传递命令行参数一样激活新的配置文件--spring.profiles.active=dev,那么不仅应该自动加载这三个文件(每个上下文一个),而且还应该自动加载另一组文件(如果存在):
application-dev.propertieschild1-dev.propertieschild2-dev.properties当然,这些文件应该按照定义的顺序在标准 spring-boot 支持的路径中搜索。
如果盒子里有一些编码,是否有可能?
只有一个application.properties文件(支持配置文件等),但以某种方式将前缀属性映射到子上下文的无前缀属性。
例子:
child1.server.port=8081
child1.foo=bar
child2.server.port=8082
child2.foo=baz
Run Code Online (Sandbox Code Playgroud)
第一个子上下文应该看到这些属性,就像它们只是:
server.port=8081
foo=bar
Run Code Online (Sandbox Code Playgroud)
第二个子上下文应该看到这些属性,就像它们只是:
server.port=8082
foo=baz
Run Code Online (Sandbox Code Playgroud)
因此,标准 spring-boot 的自动配置将工作并正确设置 tomcat 的端口等。
我不是在寻找特定的方法(但如果你问我,我倾向于第二种方法),但是任何开箱即用的工作或可实现的最小化方法都足以满足我的要求。