tom*_*mas 2 java spring spring-boot
我为我的spring boot 2项目添加了一个AJP连接器
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new
TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(redirectConnector());
return tomcat;
}
private Connector redirectConnector() {
Connector connector = new Connector("AJP/1.3");
connector.setScheme("http");
connector.setPort(ajpPort);
connector.setSecure(false);
connector.setAllowTrace(false);
return connector;
}
Run Code Online (Sandbox Code Playgroud)
这很好用.我现在可以通过我的apache webserver访问我的spring启动应用程序了.但是现在,如果我运行我的春季启动应用程序,我无法直接访问我的春季启动应用程序.所以这个网址不再起作用了
HTTP://本地主机:13080 /在线/ showlogin米=测试
如果我禁用AJP连接器,URL将再次起作用.我尝试了以下内容
private Connector redirectConnector2() {
Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
connector.setScheme("http");
connector.setPort(13080);
connector.setSecure(false);
connector.setAllowTrace(false);
return connector;
}
...
tomcat.addAdditionalTomcatConnectors(redirectConnector2());
...
Run Code Online (Sandbox Code Playgroud)
但这对我没有帮助.
tom*_*mas 10
这对我有用:
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> servletContainer() {
return server -> {
if (server instanceof TomcatServletWebServerFactory) {
((TomcatServletWebServerFactory) server).addAdditionalTomcatConnectors(redirectConnector());
}
};
}
private Connector redirectConnector() {
Connector connector = new Connector("AJP/1.3");
connector.setScheme("http");
connector.setPort(ajpPort);
connector.setSecure(false);
connector.setAllowTrace(false);
return connector;
}
Run Code Online (Sandbox Code Playgroud)
小智 7
我们成功地使用了托马斯答案的代码较长时间,但在我们升级到 Spring Boot 版本 > 2.2.4 后,它停止工作。我们在启动时收到此错误消息:
应用程序无法启动
描述:
配置为侦听端口 1234 的 Tomcat 连接器无法启动。该端口可能已在使用中,或者连接器可能配置错误。
行动:
验证连接器的配置,识别并停止正在侦听端口 1234 的任何进程,或配置此应用程序以侦听其他端口。
但是端口并没有被使用,那么问题出在哪里呢?
该问题是由Spring Boot 2.2.5 中修复 Tomcat 中 AJP 的Ghostcat 漏洞引起的。
现在你有两个选择,要么使用带有秘密的 AJP:
final Connector connector = new Connector("AJP/1.3");
connector.setScheme("http");
connector.setPort(ajpPort);
connector.setAllowTrace(false);
final AbstractAjpProtocol protocol = (AbstractAjpProtocol) connector.getProtocolHandler();
connector.setSecure(true);
protocol.setSecret(ajpSecret);
Run Code Online (Sandbox Code Playgroud)
或没有,但为此你必须明确设置setSecretRequired为false:
final Connector connector = new Connector("AJP/1.3");
connector.setScheme("http");
connector.setPort(ajpPort);
connector.setAllowTrace(false);
final AbstractAjpProtocol protocol = (AbstractAjpProtocol) connector.getProtocolHandler();
connector.setSecure(false);
protocol.setSecretRequired(false);
Run Code Online (Sandbox Code Playgroud)
注意:后面的解决方案将使您的 tomcat 再次受到 Ghostcat 的攻击。
有关更多信息,请查看此线程:Springboot -AJP 连接器配置为 SecretRequired="true",但升级到 2.2.5 后,secret 属性为 null 或 ""
| 归档时间: |
|
| 查看次数: |
4313 次 |
| 最近记录: |