H2

15822 ワード

H 2とは?


H 2はJavaベースのオープンソースRDBMSである.サーバモード、Embeddedモード(InmemoryDB)をサポートし、ディスクベースのテーブルを作成できます.ブラウザベースのコンソールモードを提供し、単独でインストールする必要がなく、速度が非常に速く、容量が2 MB未満です.
  • メモリDBを使用すると、サーバがシャットダウンすると、すべてのコンテンツが失われます.
  • 他のIPから接続できない(接続するにはサーバモードを使用する必要がある)
  • .

    Spring boot+H 2データベースのローカル環境の適用

  • build.gradleにh 2データベース依存性を追加します.
  • application.ymlの設定の変更:
  • h2.console.enabled:h 2データベース
  • を使用するかどうかを設定する
  • driver-class-name : org.h2.Driverをメモしてください.
  • url:h 2:mem=メモリdbを使用することを示し、h 2:fileは変更時のファイル管理dbを使用することを示します.
  • ユーザー名はsaで、パスワードは空です.
  • 💡 SpringBootが提供するデフォルトのオプション.
    Using the H2 Database Console in Spring Boot with Spring Security
  • サーバで実行すると、テーブルが作成されていることがわかります.
  • Webブラウザを起動し、そのURLにアクセスします.
  • 💡 http://localhost:8080/h2-console/
  • Spring Securityを使用して権限を設定中にエラー403が発生しました.この問題を解決する権限を追加します.(Spring Securityが適用されていない場合はスキップできます.)
  • エラーページ
  • ページ、favicon.icoの権限を追加します.

  • ログイン」ページが正常に接続されている場合は、次のURL、ユーザー名を入力し、「接続」をクリックします.
  • にログインしましたが、接続できません.(Spring Securityが適用されていない場合は、正常に動作します.)
  • 開発者ツールをチェックして、エラーが発生したことを確認します.
  • 💡 Refused to display 'http://localhost:8080/' in a frame because it set 'X-Frame-Options' to 'deny'.
  • h 2データベースがiframeを使用しているときに発生したエラー.「≪セキュリティ設定|Security Settings|emdw≫」セクションに追加:
  • 💡 http.headers().frameOptions().sameOrigin();
  • 適用後正常に動作

    💡 Spring Security設定を検索する場合は、Spring Profileのローカル設定と他の設定に分ける方法を参照して、プロジェクトが同じように適用されることを確認してください.
    private final Environment env;
    public SecurityConfig(JwtTokenProvider jwtTokenProvider, Environment env) {
        this.jwtTokenProvider = jwtTokenProvider;
        this.env = env;
    }
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        if (isLocalMode()) {
            setLocalMode(http);
        } else {
            setProdMode(http);
        }
    }
    private boolean isLocalMode() {
        String profile = env.getActiveProfiles().length > 0 ? env.getActiveProfiles()[0] : "";
        return profile.equals("local");
    }
    
    private void setLocalMode(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .httpBasic().disable();
    
        http
                .headers()
                .frameOptions()
                .sameOrigin();
    
        http
                .authorizeRequests()
                .antMatchers("/h2-console/*","favicon.ico").permitAll()
                .antMatchers("/member/login").anonymous()
                .antMatchers("/member/regist").anonymous()
                .antMatchers("/member/validate/**").anonymous()
                .anyRequest().authenticated()
                .and()
                .formLogin().disable()
                .addFilterBefore(new JwtAuthFilter(jwtTokenProvider), UsernamePasswordAuthenticationFilter.class);
    }
    
    private void setProdMode(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .httpBasic().disable();
    
        http
                .authorizeRequests()
                .antMatchers("/member/login").anonymous()
                .antMatchers("/member/regist").anonymous()
                .antMatchers("/member/validate/**").anonymous()
                .anyRequest().authenticated()
                .and()
                .formLogin().disable()
                .addFilterBefore(new JwtAuthFilter(jwtTokenProvider), UsernamePasswordAuthenticationFilter.class);
    }
    
  • org.springframework.core.env.Environment
  • 環境は、スプリング環境および設定に関連するインタフェースである.Profiles設定とProperty設定にアクセスできますが、設定値は変更できません.アクセスで値を取得できます.
  • isLocalModeメソッドを実行すると、環境インタフェースからプロファイルをインポートし、setLocalModeメソッドをローカルで実行し、他のプロファイルでsetProdModeを実行して、ローカル(H 2データベース)環境とオペレーション(AWS RDS[MariaDB]設定を別々に適用できます.
  • リファレンス


    https://www.slipp.net/questions/546