공부기록

[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";
    }

 

 

실행 결과

 

암호화되어 저장되었다.

반응형