Spring Boot部署至Liberty时H2控制台报webAllowOthers禁用错误
问题现象
使用H2数据库的Spring Boot应用,在内嵌Tomcat容器中运行全流程正常;将WAR包部署到Open/WebSphere Liberty服务器后,访问H2控制台时抛出如下错误:
Sorry, remote connections ('webAllowOthers') are disabled on this server.
当前application.properties中相关配置如下(该配置在内嵌Tomcat环境下可正常运行):
# H2 spring.datasource.url=jdbc:h2:mem:MYDB spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa spring.datasource.password= spring.datasource.validationQuery=SELECT 1 # HIBERNATE spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect spring.jpa.properties.hibernate.jdbc.time_zone=UTC # H2 CONSOLE spring.h2.console.enabled=true spring.h2.console.path=/h2
访问地址 http://localhost:9080/myapi/v1/h2/ 时页面报错效果如下:
问题原因
H2控制台默认出于安全考虑,禁止所有非本地回环地址的访问。Spring Boot内嵌Tomcat运行时,请求直接进入应用,H2控制台的Servlet可以直接识别到请求来源为本地127.0.0.1,因此默认配置下不会触发拦截。
部署到WebSphere Liberty这类外部容器时,请求会先经过容器的转发链路处理,H2控制台Servlet获取到的请求来源地址不再被识别为本地回环地址,因此触发了远程访问拦截规则,抛出上述错误。
解决方案
在application.properties的H2控制台配置段,新增显式允许控制台访问的配置项即可:
spring.h2.console.settings.web-allow-others=true
配置添加后重新打包部署到Liberty,重启服务后即可正常访问H2控制台。
注意:该配置会放开H2控制台的远程访问限制,仅建议在开发、测试环境使用;生产环境请关闭H2控制台,或配置严格的访问控制规则避免数据库未授权访问风险。
内容的提问来源于stack exchange,提问作者pixel
相关产品推荐
相关产品推荐

