티스토리 뷰

Password Encoder✓

Spring Security password Encoder

스프링 시큐리티 권장 PasswordEncoder

  • PasswordEncoderFactories.createDelegationPasswordEncoder
  • 기본 알고리즘 : bcrypt

패스워드 같은 중요한 정보는 암호화를 꼭 해줘야한다.

단방향 암호화를하면 좋다

해싱 알로리즘 & 솔트 (salt)

  • 해싱은 말 그대로 유저가 입력한 비밀번호에 약간의 소금을 치는 것이다.
    약간의 문자열을 추가하여 암호화를 한다.

실제 적용

Bean 등록

@Configuration
public class AppConfig {

    @Bean
    public PasswordEncoder passwordEncoder() {
        return PasswordEncoderFactories.createDelegatingPasswordEncoder();
    }
}

User Save

private final PasswordEncoder passwordEncoder;

public void saveNewUser(SignUpForm signUpForm) {

        User user = User.builder()
                .email(signUpForm.getEmail())
                .name(signUpForm.getName())
                .password(passwordEncoder.encode(signUpForm.getPassword()))
                .address(signUpForm.getAddress())
                .birth(signUpForm.getBirth())
                .phone(signUpForm.getPhone())
                .status(UserStatusType.Pending)
                .build();
        accountRepository.save(user);
    }

→ passwordEncode.encode() 실제 인코딩

{bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG 실제값을 확인해보면
이런식으로 앞에 {암호화방식} 이 붙어서 저장되게 된다.


Test Code

@DisplayName("회원가입 테스트 - 입력값 정상")
    @Test
    void signUpSubmit() throws Exception {
        mockMvc.perform(post("/sign-up")
                .param("email", "admin@mail.com")
                .param("password", "password123")
                .param("passwordChk", "password123")
                .param("name", "관리자")
                .param("address", "my address")
                .param("birth", "20000101")
                .param("phone", "01000000000")
                .with(csrf()))
                .andExpect(status().is3xxRedirection())
                .andExpect(view().name("redirect:/"))
                .andDo(print());

        User user = userRepository.findByEmail("admin@mail.com");
        assertNotNull(user);
        assertNotEquals(user.getPassword(), "password123");
        assertTrue(userRepository.existsByEmail("admin@mail.com"));
    }

status().is3xxRedirection() 는 Redircet가 되었는지 확인할 수 있다.

assertNotNull() 을 이용하여 저장 되었음을 확인하고

assertNotEquals()를 이용하여 회원가입 시 입력한 값과 실제 저장된(암호화된) 값과 다름을 확인하여 정상적으로 암호화가 되었음을 확인 해보았다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함