공부기록
[Spring Boot] Spring Security를 이용해서 비밀번호 암호화하기
Hocube
2024. 7. 7. 16:12
반응형
Spring에서는 비밀번호 암호화를 위해 제공하는 라이브러리가 있다.
Spring Boot에서 Spring Security를 이용해 비밀번호 암호화를 하려면,
‘spring-boot-starter-security’ 라이브러리를 추가하면 된다.
1. ‘spring-boot-starter-security’ dependency 복사
https://mvnrepository.com/에서 ‘spring-boot-starter-security’를 검색한다.
본인의 Spring Boot 버전과 일치하는 버전을 선택한 후 dependency 복사한다.
2. pom.xml에 추가.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>3.1.12</version>
</dependency>
3. PasswordEncoder를 빈으로 등록하여 암호화 로직 구현 및 활용
PasswordEncoder 인터페이스를 사용하여 암호화 로직을 구현하고,
Spring의 빈으로 등록하여 의존성 주입을 통해 애플리케이션 전반에서 쉽게 사용할 수 있도록 한다.
3-1. PasswordEncoder 인터페이스 사용 및 빈 등록
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
public class SecurityConfig {
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
}
3-2. 빈을 사용하는 클래스에서 의존성 주입 (PasswordEncoder 사용)
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private PasswordEncoder passwordEncoder; // 빈으로 등록된 PasswordEncoder를 주입받음
public void registerUser(String username, String rawPassword) {
String encodedPassword = passwordEncoder.encode(rawPassword); // 비밀번호 암호화
// 암호화된 비밀번호를 데이터베이스에 저장하는 로직 (생략)
}
}
3-3. Controller에서 서비스 클래스 사용
서비스 클래스에서 이미 의존성 주입을 통해 PasswordEncoder를 사용하고 있으므로,
컨트롤러에서는 별도의 설정 없이 서비스 클래스를 사용하면 된다.
@RestController
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/register")
public String registerUser(@RequestBody UserRegistrationRequest request) {
userService.registerUser(request.getUsername(), request.getPassword());
return "User registered successfully";
}
실행 결과
암호화되어 저장되었다.
반응형