일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- c
- SW Expert Academy
- SECS
- 프로그래머스
- 백준
- MYSQL
- spotify
- linux
- Spring JPA
- modern c++
- 파이썬
- programmers
- 회귀
- 회원가입
- SWEA
- SECS/GEM
- SECS-II
- Spring
- python
- Baekjoon
- Computer Science
- 자바
- java
- Gem
- regression
- CS
- 스포티파이
- spring boot
- Spotify Api
- C++
Archives
- Today
- Total
비버놀로지
[Spring JPA] 1-8. 회원 가입 : 패스워드 인코더 본문
728x90
해싱 알고리즘(bcrypt)와 솔트(salt)를 활용해서 비밀번호를 인코더해줘야 한다.
비밀번호를 암호화 하기 위해서 AccoutService에서 입력된 비밀번호를 해싱 알고리즘을 통해서 암호화 처리를 해주어야 한다.
public Account saveNewAccount(SignUpForm signUpForm) {
Account account = Account.builder()
.email(signUpForm.getEmail())
.nickname(signUpForm.getNickname())
.password(passwordEncoder.encode(signUpForm.getPassword()))
.studyCreatedByWeb(true).studyEnrollmentResultByWeb(true).studyUpdatedByWeb(true).build();
Account newAccount = accountRepository.save(account);
newAccount.generateEmailCheckToken();
return newAccount;
}
위의 코드와 같이 입력된 패스퉈드를 passwordEncoder.encode()를 통해서 SHA.256방식으로 암호화 처리를 해준다.
package com.studyolle.account.service;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import com.studyolle.repository.AccountRepository;
import com.studyolle.repository.dto.Account;
import com.studyolle.repository.dto.SignUpForm;
import lombok.RequiredArgsConstructor;
@Service
@RequiredArgsConstructor
public class AccountService {
private final AccountRepository accountRepository;
private final JavaMailSender javaMailSender;
private final PasswordEncoder passwordEncoder;
public void processNewAccount(SignUpForm signUpForm) {
Account newAccount = saveNewAccount(signUpForm);
sendSignUpConfirmEmail(newAccount);
}
public Account saveNewAccount(SignUpForm signUpForm) {
Account account = Account.builder()
.email(signUpForm.getEmail())
.nickname(signUpForm.getNickname())
.password(passwordEncoder.encode(signUpForm.getPassword()))
.studyCreatedByWeb(true).studyEnrollmentResultByWeb(true).studyUpdatedByWeb(true).build();
Account newAccount = accountRepository.save(account);
newAccount.generateEmailCheckToken();
return newAccount;
}
public void sendSignUpConfirmEmail(Account newAccount) {
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setSubject("스터디올래, 회원 가입 인증");
mailMessage.setText(
"/check-email-tocken?token=" + newAccount.getEmailCheckToken() + "&email=" + newAccount.getEmail());
javaMailSender.send(mailMessage);
}
}
위의 코드는 패스워드 암호화를 추가한 AccountService 전체 코드이다.
그리고 암호화를 사용하기 위해 config 안에 AppConfig를 생성해 준다.
package com.studyolle.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
public class AppConfig {
@Bean
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
}
위와 같이 작성해 주면 비밀번호 암호화를 사용할 수 있다.
그렇게 작성한 코드를 테스트 하기 위해 AccountControllerTest에 몇가지 추가를 통해 확인을 해준다.
@DisplayName("회원 가입 처리 - 입력값 정상")
@Test
void signUpSubmit_with_wrong_input() throws Exception {
mockMvc.perform(post("/sign-up").param("nickname", "keesun").param("email", "keesun@email.com")
.param("password", "12345678").with(csrf()))
.andExpect(status().isOk()).andExpect(view().name("account/sign-up"));
Account account = accountRepository.findByEmail("keesun@email.com");
assertNotNull(account);
assertNotEquals(account.getPassword(), "12345678");
assertTrue(accountRepository.existsByEmail("keesun@email.com"));
then(javaMailsender).should().send(any(SimpleMailMessage.class));
}
기존에 작성했던 회원 가입 처리에서 입력된 비밀번호를 암호화 한뒤, 기존의 비밀번호를 넣어서 암호화된 값과 일치하는지 확인해 주는 코드를 추가했다.
위의 코드를 실행해서 에러가 나지 않는다면 암호화가 제대로 된것을 의미한다.
728x90
'LANGUAGE STUDY > Spring' 카테고리의 다른 글
[Spring JPA] 1-10. 회원 가입 : 인증 메일 확인 테스트 (0) | 2021.05.01 |
---|---|
[Spring JPA] 1-9. 회원 가입 : 인증 메일 확인 (0) | 2021.05.01 |
[Spring JPA] 1-7. 회원 가입 리펙토링 및 테스트 (0) | 2021.04.30 |
[Spring JPA] 1-6. 회원 가입 폼 서브밋 처리 (0) | 2021.04.30 |
[Spring JPA] 1-5. 회원 가입 폼 서브밋 검증 (0) | 2021.04.30 |
Comments