본문 바로가기
프로젝트/Spring Boot 블로그프로젝트

[블로그프로젝트] 18. 비밀번호 해쉬 후 회원가입하기

by dantriss 2023. 6. 7.

유튜브에서 블로그 만들기 프로젝트를 따라하면서 나의 스킬을 조금더 레벨업 하고자 한다.

IDE : IntelliJ

언어 : Java

DB : MySQL

빌드관리 도구 : Maven

OS : iOS

참고유튜브 : 메타코딩


회원가입을 할 때 비밀번호를 1234 로 입력한다고 했을 때 DB에 1234 그대로 저장이 된다면 보안상으로 좋지 못한 방법일 것이다.

그렇기 때문에 회원가입을 할 때 입력한 비밀번호를 특정 문자열로 변경하여 DB에 저장이 된다면 비밀번호 1234로 저장되는 것보다 훨씬 안정적일 것이다.

이전글에 작성이 되어 있지만, 다시 순서대로 작성하고자 한다.

SecurityConfig.java 에 해당부분을 추가한다.

    @Bean  
    BCryptPasswordEncoder encoder(){
        return new BCryptPasswordEncoder();
    }

 

UserService.java로 이동해서 BCryptPasswordEncoder를 autuwired 해준 후 

회원가입 메서드에 유저 비밀번호를 받아서 해쉬화하는 코드를 추가한다.

 

    @Autowired
    private BCryptPasswordEncoder encoder;

    @Transactional
    public void 회원가입(User user) {
        String rawPassword = user.getPassword();
        String encPassword = encoder.encode(rawPassword);   //해쉬화

        user.setPassword(encPassword);
        user.setRole(RoleType.USER);
        userRepository.save(user);
    }

 

rawpassword로 유저가 입력한 비밀번호를 받아서 encpassword로 비밀번호를 해쉬화 하면 된다.

해쉬화를 하게 된다면 비밀번호가 특정길이의 문자열로 고정되어서 입력이 된다.

해쉬화되어 변경된 비밀번호를 set 하여 값을 저장한다.

user.js를 확인해보면 화원가입이 성공했을 때 "/"로 이동하기 때문에

SecurityConfig.java에서 해당부분을 추가해줘야 한다.

자바스크립트와 폰트, 이미지, 폰트도 같이 추가해주자.

그 후 테스트를 할 때는 crsf 토큰을 비활성하는게 좋다고 한다. (회원가입은 시큐리티에서 진행하는것이 아니라 js를 통해서 진행하기 때문에 토큰이 생성하지 않아 시큐리티가 전부 막기 때문이다.)

비활성 해주자.

 

 @Bean
    SecurityFilterChain configure(HttpSecurity http) throws Exception{
        http
                .authorizeHttpRequests()
                .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
                .requestMatchers("/css/**", "/font/**", "/images/**", "/js/**", "/auth/**","/**").permitAll()
                    .anyRequest().authenticated()
                .and()
                    .formLogin()
                    .loginPage("/auth/loginForm").permitAll()
                .and()
                .csrf().disable();  //csrf 토큰 비활성화

        return http.build();

 

그리고 서버에서 회원가입을 해보면

기존에 비밀번호가 그대로 저장이 되지 않고 해쉬화 되어 저장되는것을 확인 할 수 있다.

이때 길이제한때문에 값이 DB에 저장이 안되는 경우가 있는데 그럴 때는 

 

이렇게 길이제한을 길게 해주면 해결할 수 있다.

DB
user.java

 

댓글