Spring Boot:无法登录 h2 控制台

Posted

技术标签:

【中文标题】Spring Boot:无法登录 h2 控制台【英文标题】:Spring boot: can't login h2 console 【发布时间】:2020-09-09 07:16:59 【问题描述】:

我是 h2 DB 的新手,我已经搜索过这个问题,但没有找到解决方案。我想尝试用spring boot搭建一个tcp server模式,让别人用spring boot或者python连接。 下面是我的属性:

db2.datasource.driverClassName=org.h2.Driver
db2.datasource.url=jdbc:h2:mem:testdb
db2.datasource.username=sa
db2.datasource.password=
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.jpa.hibernate.ddl-auto=update

我可以连接到 localhost:8080/h2-console,但无法登录,它返回

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Wed Sep 09 15:08:13 CST 2020
There was an unexpected error (type=Forbidden, status=403).
Forbidden

我正在使用spring security,但是我的方法configure在开发模式下是空的,我不知道我应该在哪里修复......

我的 pom.xml:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.200</version>
</dependency>

和 tcp 服务器配置:

 @Bean(initMethod = "start", destroyMethod = "stop")
    public Server inMemoryH2DatabaseaServer() throws SQLException 
        return Server.createTcpServer(
                "-tcp", "-tcpAllowOthers", "-tcpPort", "9092");
    

    @PostConstruct
    private void initDb() 
        JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
        String sqlStatements[] = 
                "drop table employees if exists",
                "create table employees(id serial,first_name varchar(255),last_name varchar(255))",
                "insert into employees(first_name, last_name) values('Eugen','Paraschiv')",
                "insert into employees(first_name, last_name) values('Scott','Tiger')"
        ;

        Arrays.asList(sqlStatements).forEach(sql -> 
            jdbcTemplate.execute(sql);
        );

    

有人知道如何解决这个问题吗?

谢谢

【问题讨论】:

【参考方案1】:

好的,我发现了问题。 这是因为我使用的是spring security,并且是自动启用CSRF保护,所以我扩展WebSecurityConfigurerAdapter并覆盖configure

@Override
protected void configure(HttpSecurity http) throws Exception 
        http.csrf().disable();
        http.headers().frameOptions().disable();
    

它成功了。

【讨论】:

【参考方案2】:

我认为您已经包含了 spring 安全启动器。默认情况下,它会保护所有路径,尝试在安全配置中排除 H2 控制台路径(/h2-console)。

【讨论】:

以上是关于Spring Boot:无法登录 h2 控制台的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Boot 配置 H2 的 Web 控制台

Spring Boot/H2 控制台未显示我的表

Spring Boot / H2控制台没有显示我的表格

无法加载驱动程序类: org.h2.Driver in spring boot

使用 gradle 时,在 Spring Boot 测试期间无法加载驱动程序类:“org.h2.Driver”

无法加载驱动程序类:在 Spring Boot 应用程序中的 org.h2.Driver