サポート > Wagby Developer Network(R8) > Javaを用いたカスタマイズ > SpringSecurityの動作原理とカスタマイズ

Spring Security の概要とカスタマイズ方法の資料です。

2018年3月8日の Wagby 分科会で発表した資料です。

PDFファイルをご提供しています。

Spring が提供する PasswordEncoder の仕組みに準拠した、パスワードハッシュ化のカスタマイズ方法を説明します。

1. PasswordEncoder インタフェースの実装クラスを用意する

Spring Security が提供しているorg.springframework.security.crypto.password.PasswordEncoderインタフェースの実装クラスを用意します。なお Spring Security に同梱されている PasswordEncoder 派生クラスを利用することもできます。その場合は独自クラスの作成は不要です。

2. Configuration クラスを作成する

カスタマイズクラスとして Spring の Configuration クラスを作成し、1. で用意した PasswordEncoder を Bean 定義します。

@Configuration
public class MyConfiguration {

    /**
     * {@link PasswordEncoder} の bean 定義。
     * @return {@link PasswordEncoder}
     */
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new ${任意のPasswordEncoderクラス};
    }
}

パッケージ名が「jp.jasminesoft.wagby」の場合は、作成した Configuration クラスは customize/java/jp/jasminesoft/wagby/autoconfiguration フォルダにに配置してください。

3. admin, jobadmin の初期データを用意する

export/data_init/init/juser フォルダを customize/webapp/WEB-INF/export/init/juser へコピーし、item_0.xml, item_1.xml 内の <password> 要素の値を書き換えます。いずれもハッシュ化前のパスワードは "wagby" です。

"wagby" という文字を 2. で定義した PasswordEncoder に対応したハッシュ値に置き換えてください。パスワードのハッシュ値を事前に求める場合は、インターネットで公開されているサービスをご利用いただくことができます。例えば次のようなサービスがあります。[2019年3月現在]

[参考] MyConfiguration クラスのサンプル

customize/java/jp/jasminesoft/wagby/autoconfiguration/MyConfiguration.java ファイルのサンプルを示します。ここでは Spring が提供する BCryptPasswordEncoder を使ってハッシュ値を求めています。

package jp.jasminesoft.wagby.autoconfiguration;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

/**
 * カスタマイズ用の Configuration クラスです。
 * {@link PasswordEncoder} を独自実装に変更しています。
 *
 * @author JasmineSoft
 * @version $Revision$ $Date$
 */
@Configuration
public class MyConfiguration {

    /**
     * {@link PasswordEncoder} の bean 定義。
     * @return {@link PasswordEncoder}
     */
    @Bean
    public PasswordEncoder passwordEncoder() {
        // BCrypt を利用する。
        // ストレッチング回数には15を指定。
        // ストレッチング回数を省略するとデフォルトの10が適用される。
        return new BCryptPasswordEncoder(15);
    }
}