質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Spring Security

Spring Securityは、Springのサブプロジェクトの一つでWebアプリケーションに必要な機能を追加します。正規ユーザーであるかを確認するための「認証機能」と、ユーザーのアクセスを制御する「認可機能」を簡単に追加することが可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

3268閲覧

SpringSecurityでハッシュ化したパスワードを照合

takahiro00

総合スコア84

Spring Security

Spring Securityは、Springのサブプロジェクトの一つでWebアプリケーションに必要な機能を追加します。正規ユーザーであるかを確認するための「認証機能」と、ユーザーのアクセスを制御する「認可機能」を簡単に追加することが可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2019/02/15 14:13

前提・実現したいこと

SpringSecurityのPasswordEncoderであらかじめハッシュ化してDBに登録しておいたパスワードと画面上で入力したパスワードを照合したいです。(パスワード変更画面を作っていて、現在のパスワードと照合するため)
しかしうまく行かず、ソース上の「passwordEncoder.matches」でif文したときに不一致判定になってしまいます。。。。
ご教授お願いいたします。

該当のソースコード

こちらが照合をしてるソースです。(DB上のソースは一旦ベタガキしてます。)
画面から入力した値はpasswordChange.getNowPassword()で取得できています。

java

1package com.kproject01.controller; 2 3import java.security.Principal; 4 5import javax.validation.Valid; 6 7import org.springframework.beans.factory.annotation.Autowired; 8import org.springframework.context.annotation.Bean; 9import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; 10import org.springframework.security.crypto.password.PasswordEncoder; 11import org.springframework.stereotype.Controller; 12import org.springframework.validation.BindingResult; 13import org.springframework.web.bind.annotation.GetMapping; 14import org.springframework.web.bind.annotation.ModelAttribute; 15import org.springframework.web.bind.annotation.RequestMapping; 16import org.springframework.web.bind.annotation.RequestMethod; 17import org.springframework.web.servlet.ModelAndView; 18 19import com.kproject01.entity.PasswordChange; 20import com.kproject01.entity.UserEdit; 21 22@Controller 23public class PasswordChangeController { 24 25 @Autowired 26 PasswordEncoder passwordEncoder; 27 28 /** 29 * 変更処理 30 * @param passwordChange 31 * @param bindingResult 32 * @param mav 33 * @param principal 34 * @return 35 */ 36 @RequestMapping(value = "password-change-go", method = RequestMethod.POST) 37 public ModelAndView passwordChangeGo(@Valid @ModelAttribute PasswordChange passwordChange, BindingResult bindingResult, ModelAndView mav, Principal principal){ 38 System.out.println("DB上パスワード" + "$2a$10$rXo1P2N6HIrTA.735CAA0eFMfAgAD00ABIhzHioCr.Xe7HnVadTsi"); 39 //DB上のパスワードベタガキ 40 String dbPass = "$2a$10$rXo1P2N6HIrTA.735CAA0eFMfAgAD00ABIhzHioCr.Xe7HnVadTsi"; 41 //入力したパスワード 42 String inPass = passwordChange.getNowPassword(); 43 //パスワード照合 44 if (passwordEncoder.matches(dbPass, inPass)) { 45 System.out.println("一致"); 46 }else{ 47 System.out.println("不一致"); 48 } 49 return null; 50 } 51} 52

一応コンフィグファイルは以下です。

java

1package com.kproject01.config; 2 3import org.springframework.context.annotation.Bean; 4import org.springframework.context.annotation.Configuration; 5import org.springframework.security.config.annotation.web.builders.HttpSecurity; 6import org.springframework.security.config.annotation.web.builders.WebSecurity; 7import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; 8import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 9import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; 10import org.springframework.security.crypto.password.PasswordEncoder; 11 12@Configuration 13@EnableWebSecurity 14public class SecurityConfig extends WebSecurityConfigurerAdapter { 15 16 @Override 17 public void configure(WebSecurity web) throws Exception { 18 web.ignoring().antMatchers("/webjars/**", "/favicon.ico", "/css/**", 19 "/js/**", "/img/**"); 20 } 21 22 @Override 23 protected void configure(HttpSecurity http) throws Exception { 24 http.authorizeRequests().antMatchers("/") 25 .permitAll().antMatchers("/admin").hasRole("ADMIN") 26 .anyRequest().authenticated().and().formLogin() 27 .loginProcessingUrl("/authenticate").loginPage("/") 28 .failureUrl("/?error").defaultSuccessUrl("/user-top", true) 29 .usernameParameter("username").passwordParameter("password") 30 .and().logout().logoutSuccessUrl("/").and(); 31 } 32 33 @Bean 34 PasswordEncoder passwordEncoder() { 35 return new BCryptPasswordEncoder(); 36 } 37 38}

補足情報(FW/ツールのバージョンなど)

java8
SpringBoot2.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

matchesメソッドに渡す引数が逆ではないかと思います。

java

1passwordEncoder.matches(dbPass, inPass)

Interface PasswordEncoderのJavaDocをみると

matches(java.lang.CharSequence rawPassword, java.lang.String encodedPassword)

Verify the encoded password obtained from storage matches the submitted raw password after it too is encoded.

上記に引用したように第1引数が入力された生のパスワード(raw password)で、第2引数がDBなどに保存しているエンコードされたパスワード(encoded password)です。

一度、引数の順番を変えて試してみてください。

投稿2019/02/15 14:55

rubytomato

総合スコア1752

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takahiro00

2019/02/16 01:26

引数の順番を変えたらうまくできました! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問