저번에 비밀번호 인코딩하는 법을 공부했었다. 이제 비교하는 법을 적용해보았다.
처음에는 해시코드를 각각 생성해서 (.hashcode() 사용) 같은 지 비교해보았는데 전혀 다른 값이 나왔다.
그래서 폭풍검색을 했더니 누가 .matches() 메서드를 써보라고 했다.
근데 또 쓰는 것도 단번에 안되고 해맸다. 파라미터로 무슨 값을 넣어야 할지 몰랐고 여하튼 몇번 틀리다가 아래처럼 테스트 완료까지 했다.
package com.fastcampus.ch4.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import javax.servlet.http.HttpServletRequest;
@Controller
public class PwdController {
@Autowired
BCryptPasswordEncoder passwordEncoder;
@GetMapping("/register")
public String register() {
return "input";
}
@PostMapping("/register")
public String register(HttpServletRequest request) {
//1. request객체로부터 name이 pwd인 값을 얻어서 저장한다. (input name="pwd" 주의)
String pwd = request.getParameter("pwd");
//2. 테스트용으로 미리 인코딩한 비밀번호를 선언한다.
String testEncodedPwd = passwordEncoder.encode("jinvicky");
//passwordEncoder의 내장 메서드인 matches(입력받은 비밀번호, 인코딩된 디비 안 비밀번호);
System.out.println(passwordEncoder.matches(pwd, testEncodedPwd));
return "redirect:/";
}
}
요부분 나중에도 틀리지 않게 주의해라
System.out.println(passwordEncoder.matches(pwd, testEncodedPwd));
즉 주입받은 인코더.matches(입력한 비번, 인코딩된 비번)다.
아래 사이트 보고 했다. 이해하기 쉬워서 좋았다.
https://gompangs.tistory.com/entry/Spring-Password-Encoder
너무 간단한 거라서 설명할 게 없다. 그래도 단계별로 해야 나는 안 꼬이는 편이다.