前提・実現したいこと
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

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/16 01:26