h2-consoleとspring-boot-starter-securityと私
   1 min read

概要

spring-boot-starter-security を導入しても http://localhost:8080/h2-console にアクセスしたかった。

作業結果: https://github.com/yukihane/hello-java/tree/master/spring/h2-console-spring-security-example

手順

h2-console が使える依存関係を追加してプロジェクトセットアップ 8113d7

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>

h2-console を表示してみる 1b16dc

spring.h2.console.enabled=true
spring.datasource.generate-unique-name=false
1
2
3
create table greeting_table (
  message varchar(256) not null
);

(注: spring.datasource.generate-unique-name 設定は Spring Boot 2.3.0 からデフォルト値が変わったため必要になったもので、リンク先 Git リポジトリには含まれていません(参考))

の設定を行った上で http://localhost:8080/h2-console/ へアクセス。

項目名 設定値
Driver Class org.h2.Driver
JDBC URL jdbc:h2:mem:testdb
User Name sa
Password (空)

spring-boot-starter-security を追加してアクセスしてみる 61357fe

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>

http://localhost:8080/h2-console/

spring-boot-login.png

はいはいこれね。 15e7b26

@Configuration
public class MyWebSecConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(final HttpSecurity http) throws Exception {
    }
}

h2-console ログイン画面が表示されるので上で書いたものと同じ入力を行い Connect。

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

Fri Jul 12 11:30:17 JST 2019
There was an unexpected error (type=Forbidden, status=403).
Forbidden

なぜなのか。

対処 d4b449b

@Configuration
public class MyWebSecConfig extends WebSecurityConfigurerAdapter {

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