login(@RequestBody Mapimport java.util.Map;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import lombok.RequiredArgsConstructor;
@RestController
@RequiredArgsConstructor // <- 필수 (Bean을 가져오는 생성자를 자동으로 만들어준다)
@RequestMapping("/api")
public class AuthController {
private final PasswordEncoder pe; // Bean으로 등록한 메서드를 가져옴
@PostMapping("/login")
public Map<String, String> login(@RequestBody Map<String, String> body){
String pw = body.get("password");
String encoded = pe.encode(pw); // 받은 비밀번호를 인코딩
System.out.println(encoded);
boolean a = pe.matches(pw, encoded); // 입력한 pw와 인코딩된 비밀번호 비교(true, false)
System.out.println(a);
return Map.of(body.get("email"), body.get("password"));
}
}
SecurityConfig.class
// 비밀번호를 평문으로 비교하면 위험하니 해시로 비교
// BCryptPasswordEncoder가 가장 흔한 표준
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(6); // <- 숫자는 인코딩 강도 (기본값 10, 높을수록 보안은 좋지만 느림)
}