gradle에 spring-security를 추가한다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
}
@Configuration : 설정파일이라는 것을 알려주는 어노테이션
@Bean : 빈으로 등록하는 어노테이션 (return 타입이 주입됨)
@Configuration
public class SecurityConfig {
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
String encode(CharSequence rawPassword)
class PasswordEncoderTest {
@Autowired
PasswordEncoder passwordEncoder;
public void passwordEncoder {
String originPassword = "1234";
String encodedPassword = passwordEncoder.encode(originPassword);
System.out.println(encodedPassword);
}
}
결과
$2a$10$u1uN2nOehZ9chk4VU4rTB.a4sbWeKD5WGgoefPcTfe6HBjySa4Ab.
class PasswordEncoderTest {
@Autowired
PasswordEncoder passwordEncoder;
public void passwordEncoder {
String encodedPassword1 = passwordEncoder.encode("1234");
String encodedPassword2 = passwordEncoder.encode("1234");
System.out.println(encodedPassword1);
System.out.println(encodedPassword2);
}
}
결과
$2a$10$VXIddKgmJdrrB0pGFE6kmuPEC2S/zdVqdczqbsY9jiEELW0W8xhoi
$2a$10$FC.QNUevmqhyHyBK7EdOWO3S0qbbULhNzBb7LIb8lCi/23jxl9Yzu
같은 비밀번호 1234를 암호화했지만 결과는 다르게 나오는 걸 확인할 수 있다.
그러면 저장해놓은 암호화한 비밀번호와 로그인 시 입력한 비밀번호를 어떻게 비교할 수 있을까?
PasswordEncoder의 matches() 함수를 쓰면 확인해볼 수 있다.
boolean matches(CharSequence rawPassword, String encodedPassword);
class PasswordEncoderTest {
public void login(String inputPassword) {
String dbPassword = "$2a$10$u1uN2nOehZ9chk4VU4rTB.a4sbWeKD5WGgoefPcTfe6HBjySa4Ab.";
boolean matchResult = passwordEncoder.matches(inputPassword, dbPassword);
System.out.println(matchResult); // 결과 : true
}
}
** dbPassword는 db에 저장되어 있는 비밀번호를 가져오면된다.
[출처]
https://kedric-me.tistory.com/entry/Spring-Password-Encoder-%EB%B9%84%EB%B0%80%EB%B2%88%ED%98%B8-%EC%95%94%ED%98%B8%ED%99%94
https://velog.io/@hyeinisfree/SpringSecurity-PasswordEncoder