LoginSignup
3
5

More than 3 years have passed since last update.

SpringSecurity ハッシュ化したパスワードでログイン処理をしようとしてハマった(解決済み)

Last updated at Posted at 2018-11-07

環境

  • SpringBoot 1.5.3

やりたかったこと

画面から入力されたIDとパスワードを用いたログイン処理です。
パスワードはハッシュ化してデータベースのユーザーテーブルに保存しているので、入力されたパスワードとデータベースに保存されたハッシュ値を比較する必要がありました。

ハマったこと

ユーザーテーブルに格納されているはずのアカウントでログインしようとして認証NGとなる。
ハッシュ化する処理を取り除いて平文でログインを行うと認証OKとなる。

原因

こんなソースを書いていました。

WebSecurityConfig.java(修正前)
@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    UserDetailsServiceImpl userDetailsService;

    /** ~省略~ */

    @Bean
    PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService)
            .passwordEncoder(passwordEncoder());
    }
}

ググってSpringのログイン認証に関する記事を調べると、ほとんどのサイトでconfigureGlobalメソッド内でパスワードエンコーディング方式を設定する的なことが書かれていました。
参考にしてるサイトに書いてある通りにしてるのになんでや!?と思っていたら、
どうやらconfigureメソッドでの設定で上書きされていたようです。

  1. configureGlobalメソッドで設定
  2. configureメソッドで設定

という処理順だったようです。
あまり細かく理解できていないので、Springのライフサイクルをちゃんと知るべきだと思いました。

WebSecurityConfig.java(修正後)
@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    UserDetailsServiceImpl userDetailsService;

    /** ~省略~ */

    @Bean
    PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    /** ~configureメソッドを削除~ */

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService)
            .passwordEncoder(passwordEncoder());
    }
}
3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5