Spring Boot配置HTTPS后调用接口出现404 Not Found问题排查
问题分析与解决方案
你的核心问题是外部Tomcat部署Spring Boot WAR包时,重复配置了SSL且Spring Boot的配置无效,同时Tomcat的HTTPS端口未正确路由到你的应用,导致HTTPS请求返回404。以下是具体排查和修复步骤:
1. 移除Spring Boot中无效的SSL配置
当你将Spring Boot应用打包成WAR部署到外部Tomcat时,application.yml里的server.ssl和server.port配置是针对嵌入式Tomcat的,外部Tomcat完全不会读取这些配置,属于冗余配置,直接删除:
# 以下配置全部删除,无任何作用 server: ssl: key-store: classpath:keystore.p12 key-store-password: password key-store-type: PKCS12 key-alias: alias enabled: true port: 443
2. 修正Tomcat的HTTPS Connector配置
修改server.xml中的HTTPS连接器配置,确保协议和参数正确:
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" scheme="https" secure="true" keystoreFile="conf/keystore.p12" keystorePass="password" keyAlias="alias" clientAuth="false" sslProtocol="TLS" sslEnabledProtocols="TLSv1.2,TLSv1.1"/>
- 将
protocol改为org.apache.coyote.http11.Http11NioProtocol:这是Tomcat推荐的NIO协议,性能更优且兼容性更好,避免旧HTTP/1.1协议的潜在问题。 - 确认
keystoreFile路径:conf/keystore.p12是Tomcat根目录相对路径,确保证书文件确实存在于conf文件夹下(你用HTTP访问443返回400,说明SSL已启用,路径大概率没问题)。
3. 确认应用部署与上下文路径
- 你的WAR包必须重命名为
ourectestschool.war并放在Tomcat的webapps目录下:这样应用的上下文路径就是/ourectestschool,和你8080端口访问的路径一致。如果WAR包名不是这个,比如是ROOT.war,上下文路径会为空,访问URL需要改为https://fortunenetworks.in:443/public/users/checkToken。 - 检查
server.xml中的Host配置:确保没有自定义Context节点干扰应用的上下文映射,默认配置即可:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- 不要添加和你的应用相关的自定义Context配置 --> </Host>
4. 查看Tomcat日志定位问题
查看Tomcatlogs目录下的以下日志文件:
catalina.out:检查是否有SSL证书加载失败、端口冲突等启动错误。localhost_access_log.*.txt:查看HTTPS请求的记录,确认请求路径是否正确到达应用。localhost.log:查看应用初始化过程中是否有异常。
5. 验证HTTPS基础连通性
先访问https://fortunenetworks.in:443:
- 如果能看到Tomcat默认欢迎页,说明HTTPS配置正常,问题出在应用部署或上下文路径;
- 如果看不到,说明Tomcat的SSL配置存在问题,需要重新检查证书和Connector参数。
补充说明
你用HTTP访问443端口返回400是正常行为:因为443端口配置了SSL,只能接收HTTPS请求,HTTP请求会被直接拒绝。而8080端口能正常访问,说明应用本身没有问题,问题完全出在Tomcat的HTTPS端口与应用的映射环节。
内容的提问来源于stack exchange,提问作者KJEjava48
相关产品推荐
相关产品推荐

