You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spring Boot+Gradle项目:H2控制台Tomcat可见WebLogic不可见

我来帮你搞定WebLogic下H2控制台无法访问的问题!之前在项目里也碰到过一模一样的情况,咱们一步步来排查和配置:

1. 先确认WebLogic的上下文路径

Tomcat里你用的http://localhost:8080/../../api/h2-console路径其实是依赖Tomcat的上下文路径处理,但WebLogic的上下文根规则不一样。你得先搞清楚WebLogic里你的应用上下文根是什么:

  • 登录WebLogic控制台,找到你的部署应用,查看「部署设置」里的上下文根(比如war包部署的话,默认是war包的名称)。
  • 正确的访问路径应该是http://<WebLogic主机>:<端口>/<上下文根>/h2-console,比如上下文根是my-api,那就是http://localhost:7001/my-api/h2-console

2. 手动注册H2控制台的Servlet映射

WebLogic对Servlet的自动映射支持不如Tomcat友好,咱们手动配置一个ServletRegistrationBean来强制映射:
在你的Spring Boot配置类里添加这段代码:

import org.h2.server.web.WebServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class H2ConsoleConfig {
    @Bean
    public ServletRegistrationBean<WebServlet> h2ConsoleServletRegistration() {
        ServletRegistrationBean<WebServlet> registrationBean = new ServletRegistrationBean<>(new WebServlet());
        // 这里可以对应你之前习惯的路径,比如"/api/h2-console/*"或者直接"/h2-console/*"
        registrationBean.addUrlMappings("/h2-console/*");
        registrationBean.setLoadOnStartup(1);
        return registrationBean;
    }
}

这样能确保WebLogic识别到H2控制台的Servlet路径。

3. 调整WebLogic的安全和资源访问设置

WebLogic的默认安全策略可能会拦截H2控制台的请求,需要做两个小调整:

  • 临时关闭CSRF保护(仅调试用,生产环境别开):登录WebLogic控制台,依次进入「域结构」→「安全配置」→「安全域」→选择你的域→「CSRF保护」,暂时关闭CSRF保护,或者把H2控制台的路径添加到例外列表。
  • 配置静态资源的MIME类型:WebLogic可能会拦截H2控制台的CSS、JS文件,导致页面加载异常。如果你的项目没有web.xml,就在src/main/webapp/WEB-INF下新建一个,添加如下配置:
<mime-mapping>
    <extension>css</extension>
    <mime-type>text/css</mime-type>
</mime-mapping>
<mime-mapping>
    <extension>js</extension>
    <mime-type>application/javascript</mime-type>
</mime-mapping>
<mime-mapping>
    <extension>html</extension>
    <mime-type>text/html</mime-type>
</mime-mapping>

4. 核对Spring Boot的核心配置

确保你的application.properties(或application.yml)里的H2配置完整:

# 开启H2控制台
spring.datasource.h2.console.enabled=true
# 允许外部访问控制台(WebLogic环境下需要)
spring.datasource.h2.console.settings.web-allow-others=true
# 数据源基础配置,根据你的实际情况调整
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver

5. 确认war包部署的必要配置

如果你的应用是打包成war包部署到WebLogic,一定要让启动类继承SpringBootServletInitializer

@SpringBootApplication
public class YourApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(YourApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

这是Spring Boot应用适配外部Servlet容器的关键配置。

做完这些配置后,重新打包部署并重启WebLogic,再用正确的上下文路径访问H2控制台,应该就能正常打开并执行CRUD操作了!

内容的提问来源于stack exchange,提问作者user9232119

火山引擎 最新活动