issue # validator, converter 구현 중

This commit is contained in:
2025-11-03 02:21:09 +00:00
parent c36b39c697
commit 461a27cc9c
6 changed files with 110 additions and 16 deletions

View File

@@ -10,6 +10,6 @@ public class SecurityConfig {
@Bean @Bean
public PasswordEncoder passwordEncoder() { public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(); return new BCryptPasswordEncoder(10);
} }
} }

View File

@@ -4,12 +4,20 @@ package com.baekyangdan.scheduler.repository.user;
import java.util.Optional; import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.jpa.repository.query.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.baekyangdan.scheduler.entity.user.UserEntity; import com.baekyangdan.scheduler.entity.user.UserEntity;
@Repository @Repository
public interface UserRepository extends JpaRepository<UserEntity, String> { public interface UserRepository extends JpaRepository<UserEntity, String> {
Optional<UserEntity> findByEmail(String email); Optional<UserEntity> findByEmail(String email);
Optional<UserEntity> findById(String id);
@Transactional
@Modifying(clearAutomatically = true)
@Query("UPDATE UserEntity u SET u.password = :password WHERE u.email = :email")
int resetPasswordByEmail(@Param("password") String newPassword, @Param("email") String email);
} }

View File

@@ -0,0 +1,21 @@
package com.baekyangdan.scheduler.utils.converter;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
@Component
public class PasswordConverter {
private final PasswordEncoder passwordEncoder;
public PasswordConverter(PasswordEncoder passwordEncoder) {
this.passwordEncoder = passwordEncoder;
}
public String encode(String rawPassword) {
return passwordEncoder.encode(rawPassword);
}
public boolean matches(String rawPassword, String encodedPassword) {
return passwordEncoder.matches(rawPassword, encodedPassword);
}
}

View File

@@ -0,0 +1,46 @@
package com.baekyangdan.scheduler.utils.generator;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class PasswordGenerator {
private static final String DIGITS = "0123456789";
private static final String LOWER = "abcdefghijklmnopqrstuvwxyz";
private static final String UPPER = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final String SPECIAL="!@#$";
private static final String ALL = DIGITS + LOWER + UPPER + SPECIAL;
private static final SecureRandom random = new SecureRandom();
public static String generateRandomPassword() {
int length = 10;
List<Character> passwordCharacters = new ArrayList<>(length);
passwordCharacters.add(randomCharFrom(DIGITS));
passwordCharacters.add(randomCharFrom(LOWER));
passwordCharacters.add(randomCharFrom(UPPER));
passwordCharacters.add(randomCharFrom(SPECIAL));
for (int i = 4; i < length; i++) {
passwordCharacters.add(randomCharFrom(ALL));
}
Collections.shuffle(passwordCharacters, random);
StringBuilder sb = new StringBulilder(length);
for (char c : passwordCharacters) {
sb.append(c);
}
return sb.toString();
}
private static char randomCharFrom(String s) {
int idx = random.nextInt(s.length());
return s.charAt(idx);
}
}

View File

@@ -0,0 +1,15 @@
package com.baekyangdan.scheduler.utils.validation;
public class BaseValidation {
private String emailRegExp = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{1,}$"
protected static boolean validateStringEmpty(String value) {
if (value == null) {
return true;
}
if (value.trim().isEmpty()) {
return true;
}
return false;
}
}

View File

@@ -5,29 +5,33 @@ import org.springframework.security.access.method.P;
import com.baekyangdan.scheduler.code.user.SignUpValidationCode; import com.baekyangdan.scheduler.code.user.SignUpValidationCode;
import com.baekyangdan.scheduler.repository.user.UserRepository; import com.baekyangdan.scheduler.repository.user.UserRepository;
import com.baekyangdan.scheduler.request.user.UserRequest; import com.baekyangdan.scheduler.request.user.UserRequest;
import com.baekyangdan.scheduler.utils.validation.BaseValidation;
public class UserValidation { public class UserValidation extends BaseValidation {
public static boolean validateSignUpForm(UserRequest.SignUp data) throws Exception { public static boolean validateSignUpForm(UserRequest.SignUp data) throws Exception {
if (validateStringEmpty(data.getId())) { if (validateStringEmpty(data.getId())) {
throw new Exception(SignUpValidationCode.ID_EMPTY.getMessage()); throw new Exception(SignUpValidationCode.ID_EMPTY.getMessage());
} }
if (data.getEmail() == null || data.getEmail().trim().isEmpty()) {
if (validateStringEmpty(data.getEmail())) {
throw new Exception(SignUpValidationCode.EMAIL_EMPTY.getMessage());
} }
if (validationStringEmpty(data.getPassword())) {
throw new Exception(SignUpValidationCode.PASSWORD_EMPTY.getMessage());
}
if (validationStringEmpty(data.getName())) {
throw new Exception(SignUpValidationCode.NAME_EMPTY.getMessage());
}
if (validationStringEmpty(data.getNickname())) {
throw new Exception(SignUpValidationCode.NICKNAME_EMPTY.getMessage());
}
return true; return true;
} }
private static boolean validateStringEmpty(String value) {
if (value == null) {
return true;
}
if (value.trim().isEmpty()) {
return true;
}
return false;
}
} }