Springboot & Vue3.js - 비밀번호 암호화 - BcryptPasswordEncoder (tistory.com)
submit 함수를 async로 선언하는 이유는 비동기 작업을 포함하고 있으며, 이 작업이 완료될 때까지 기다려야 하는 경우가 있기 때문입니다. async와 await를 사용하면 비동기 작업이 완료될 때까지 기다리고, 완료된 후에 다음 작업을 수행할 수 있습니다.
당신이 이미 PasswordEncoder를 설정하는 AppConfig 클래스를 만들어 Spring Security의 기본 PasswordEncoder를 사용하도록 했습니다. 이 설정은 디폴트로 Bcrypt와 salt를 사용하여 비밀번호를 암호화합니다. 이는 좋은 보안 설정의 기초가 됩니다.
그러나, 프로덕션 환경에서 보안을 강화하기 위해서는 추가적인 설정이 필요합니다. 여기에는 사용자 인증 및 권한 부여 설정, CSRF 방어, 보안 헤더 설정 등이 포함됩니다. Spring Security를 사용한 보안 설정의 예시는 다음과 같습니다:
- WebSecurityConfigurerAdapter 설정: Spring Security 설정 클래스를 만들어 사용자 인증 및 권한 부여 설정을 구성합니다.
-
java코드 복사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.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.password.PasswordEncoder; @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { private final PasswordEncoder passwordEncoder; public SecurityConfig(PasswordEncoder passwordEncoder) { this.passwordEncoder = passwordEncoder; } @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/", "/home", "/public/**").permitAll() // 공개된 엔드포인트 .anyRequest().authenticated() // 나머지 모든 요청은 인증 필요 .and() .formLogin() .loginPage("/login") // 커스텀 로그인 페이지 .permitAll() .and() .logout() .permitAll() .and() .csrf() .disable(); // 필요에 따라 CSRF 설정 } }
- UserDetailsService 구현: 사용자 정보를 로드하기 위해 UserDetailsService를 구현합니다.
-
java코드 복사import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; @Service public class CustomUserDetailsService implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // 사용자 정보를 데이터베이스에서 로드 // 예를 들어, User 엔티티 클래스를 사용한다고 가정 User user = userRepository.findByUsername(username); if (user == null) { throw new UsernameNotFoundException("User not found"); } return new org.springframework.security.core.userdetails.User( user.getUsername(), user.getPassword(), user.getAuthorities() ); } }
- PasswordEncoder 사용: 사용자 비밀번호를 저장할 때 PasswordEncoder를 사용하여 암호화합니다.
-
java코드 복사import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @Service public class UserService { private final UserRepository userRepository; private final PasswordEncoder passwordEncoder; @Autowired public UserService(UserRepository userRepository, PasswordEncoder passwordEncoder) { this.userRepository = userRepository; this.passwordEncoder = passwordEncoder; } public void saveUser(User user) { // 비밀번호를 암호화하여 저장 user.setPassword(passwordEncoder.encode(user.getPassword())); userRepository.save(user); } }
- CSRF 보호: CSRF 보호는 기본적으로 활성화되어 있으며, 폼 기반 인증을 사용하는 경우에는 필요합니다. AJAX 요청이나 API를 사용하는 경우 CSRF 토큰을 설정하고 전송하는 방법을 고려해야 합니다.
- 보안 헤더 설정: 추가적인 보안 헤더를 설정하여 보안을 강화할 수 있습니다.
-
java코드 복사@Override protected void configure(HttpSecurity http) throws Exception { http .headers() .contentSecurityPolicy("script-src 'self'"); // 예시: Content Security Policy 설정 }
이러한 설정은 Spring Boot 애플리케이션에서 보안을 강화하는 데 도움이 됩니다. 프로덕션 환경에서는 이와 같은 보안 설정을 꼼꼼히 검토하고 필요한 경우 추가적인 보안 조치를 취해야 합니다.
'개인 프로젝트' 카테고리의 다른 글
| 403 Forbidden (0) | 2024.07.24 |
|---|---|
| Spring security 의존성 추가하고.... (0) | 2024.07.21 |
| 기상청 API로 날씨 정보 가져오기.... 절반 성공 (0) | 2024.07.02 |
| 위치, 지도, 날씨 (0) | 2024.05.31 |
| Vue3 모달창(팝업창) 띄우기 (0) | 2024.05.28 |