공부/Spring Boot

Spring Boot) 회원가입 시 PasswordEncoder 이용해 비밀번호 암호화

son_i 2024. 8. 12. 22:09
728x90

초기에 백엔드 개발을 배울 때 했던 건데 다시 하려니까 기억이 잘 안나서 다시 정리하려고 한다.

 

1. 의존성 주입

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

 

2. PasswordEncoder @Bean으로 등록

 

* Bean으로 등록하지 않으면 아래와 같은 오류가 난다.

Description:
Parameter 1 of constructor in com.sj.Petory.domain.member.service.MemberService required a bean of type 'org.springframework.security.crypto.password.PasswordEncoder' that could not be found.

Action:
Consider defining a bean of type 'org.springframework.security.crypto.password.PasswordEncoder' in your configuration.

 

3. passwordEncoder 인터페이스 이용해 암호화

MemberService.java

public class MemberService {
    private final MemberRepository memberRepository;

    private final PasswordEncoder passwordEncoder;

    public boolean signUp(SignUp.Request request) {

        checkEmailDuplicate(request.getEmail());
        checkNameDuplicate(request.getName());

        request.setPassword(
                passwordEncoder.encode(request.getPassword()));

        memberRepository.save(request.toEntity());

        return true;
    }

 

접속하면 기본 로그인 페이지가 뜨는데 

username : user

password : 프로젝트 실행 시 콘솔에 뜨는 임시 비밀번호

로 로그인이 가능하다.

 

 

근데 나는 user로 로그인이 안 되서 아래와 같이 application.yml에 설정해주었다.

spring:
  security:
    user:
      name: a
      password: a

 

음 근데 이것도 안 되네

 

어차피 SecurictyConfig 설정하면서 없애줄 것이기 때문에 아래와 같이 작성한다.

package com.sj.Petory.config;

import org.springframework.boot.autoconfigure.security.servlet.PathRequest;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;

import static org.springframework.security.config.Customizer.withDefaults;


@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .csrf((csrfConfig) ->
                        csrfConfig.disable()
                )
                .headers((headerConfig) ->
                        headerConfig.frameOptions(frameOptionsConfig ->
                                frameOptionsConfig.disable()
                        )
                )
                .authorizeHttpRequests((authz) ->
                        authz
                                .requestMatchers(PathRequest.toH2Console()).permitAll()
                                .anyRequest().permitAll()
                );

        return http.build();
    }
}

 

이전과 구조가 많이 달라진 것 같아서 공부를 해서 다시 정리해야겠다 !

다음 포스팅에서 Spring Security 정리하겠다.

 

 


참고

 

BCryptoEncoder Bean 등록

https://thalals.tistory.com/301

 

[Spring err] 스프링 시큐리티 - Consider defining a bean of type 'org.springframework.security.crypto.password.PasswordEnc

Parameter 1 of constructor in com.example.zaritalk.service.UserService required a bean of type 'org.springframework.security.crypto.password.PasswordEncoder' that could not be found. package com.example.zaritalk.service; import com.example.zaritalk.domain.

thalals.tistory.com

 

Spring Security 기본 로그인 화면 없애기

https://velog.io/@joranegs92/Spring-security-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%ED%99%94%EB%A9%B4-%EC%97%86%EC%95%A0%EA%B8%B0-hlm5elgz

 

# Spring Security] 로그인 화면 없애기

spring security를 설치하고 처음 구동을 하게 되면 바로 이 화면이 뜨게 된다. 일단 시큐리티 5버전 이하라면 이렇게 처리하면 그만이다.시큐리티 5이상에서는 WebSecurityConfigurerAdapter 가 사용권장되

velog.io

 

공식문서

https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter

 

Spring Security without the WebSecurityConfigurerAdapter

In Spring Security 5.7.0-M2 we deprecated the WebSecurityConfigurerAdapter, as we encourage users to move towards a component-based security configuration. To assist with the transition to this new style of configuration, we have compiled a list of common

spring.io

 

728x90