server/Spring

Spring Security를 이용한 비밀번호 암호화

지제로 2023. 3. 18. 15:59

회원가입 시 비밀번호를 PasswordEncoder를 통해 암호화하여 저장합니다.

 

 

1. build.gradle 설정

	implementation 'org.springframework.boot:spring-boot-starter-security'
	testImplementation 'org.springframework.security:spring-security-test'

 

 

2. Bean 설정

@Configuration
@EnableWebSecurity
public class SecurityConfig {
	
    ...

    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
}

비밀번호를 암호화할 때 사용할 PasswordEncoder를 Bean으로 설정한다.

 

3. PasswordEncoder.encode()

    
@RequestMapping("/members")
@Controller
@RequiredArgsConstructor
public class MemberController {
    private final MemberService memberService;
    private final PasswordEncoder passwordEncoder;

	...

    @PostMapping(value="/new")
    public String createNewMember(@Valid MemberFormDto memberFormDto,
    BindingResult bindingResult, Model model){
        if(bindingResult.hasErrors())
            return "member/memberForm";
        try {
            Member member = Member.createMember(memberFormDto, passwordEncoder);
            memberService.saveMember(member);
        }catch(IllegalStateException e){
            model.addAttribute("errorMessage:"+e.getMessage());
            return "member/memberForm";
        }
        return "main";
    }

passwordEncoder를 memberForm과 같이 넘겨준다.

 

    public static Member createMember(MemberFormDto memberFormDto, PasswordEncoder passwordEncoder){
        Member member=new Member();
        member.setName(memberFormDto.getName());
        member.setEmail(memberFormDto.getEmail());
        String password= passwordEncoder.encode(memberFormDto.getPassword());
        member.setPassword(password);
        member.setRole(Role.USER);
        return member;
    }

Member Entity에 createMember란 함수를 통해 전달받은 passwordEncoder를 이용하여 encode를 통해 비밀번호를 암호화한다.

 

결과