|
-------------------------------RegisterController
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import cohttp://m.shoppingmall.users.UserService;
import cohttp://m.shoppingmall.users.Users;
@Controller
public class RegisterController {
@Autowired
private UserService userService;
@GetMapping("/register")
public String registerForm(Model model) {
model.addAttribute("user", new Users());
return "user/register";
}
@PostMapping("/register")
public String registerSubmit(@ModelAttribute Users user) {
if (userService.doesEmailAlreadyExists(user.getEmail())) {
// 처리할 예외 상황에 대한 로직 추가 (이미 사용 중인 이메일일 경우)
// 여기에 이미 등록된 이메일에 대한 처리 로직을 추가하세요.
// 예: 오류 메시지 표시 또는 다른 처리 방법 선택
return "user/register"; // 실패 시 다시 회원가입 폼으로 이동
} else {
if (user.getHashedpassword() == null || user.getHashedpassword().isEmpty()) {
// 처리할 예외 상황에 대한 로직 추가 (비어있는 비밀번호)
// 여기에 비밀번호가 비어있는 경우의 처리 로직을 추가하세요.
// 예: 오류 메시지 표시 또는 다른 처리 방법 선택
return "user/register"; // 실패 시 다시 회원가입 폼으로 이동
} else {
String hashedPassword = userService.hashPassword(user.getHashedpassword());
user.setHashedpassword(hashedPassword);
userService.createUser2(user);
return "redirect:/login"; // 회원가입 성공 시 로그인 페이지로 이동
}
}
}
}
------------------------------userservice
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
//사용자생성
public Users createUser(Users user) {
return userRepository.save(user);
}
public void createUser2(Users user) {
userRepository.save(user);
}
//사용자찾기
public Optional<Users> findUserById(Long userId) {
return userRepository.findById(userId);
}
//모든사용자 찾기
public List<Users> findAllUsers() {
return userRepository.findAll();
}
//사용자업데이트
public Users updateUser(Users user) {
return userRepository.save(user);
}
//사용자삭제
public void deleteUser(Long userId) {
userRepository.deleteById(userId);
}
//이메일
public Optional<Users> findUserByEmail(String email) {
if (email == null) throw new NullPointerException("EMail must not be null.");
if (email.isEmpty()) throw new NullPointerException("EMail must not be empty.");
return userRepository.findFirstByEmail(email.toLowerCase().trim());
}
//이메일중복방지//이건됨
public boolean doesEmailAlreadyExists(final String email) {
if (email == null) throw new NullPointerException("Email must not be null.");
if (email.isEmpty()) throw new NullPointerException("Email must not be empty.");
return findUserByEmail(email).isPresent();
}
//패스워드를 해싱하여 반환하는 메소드 (SHA-256 해시 알고리즘 사용)
// public String hashPassword(String password) {
// try {
// MessageDigest md = MessageDigest.getInstance("SHA-256");
// byte[] hashedBytes = md.digest(password.getBytes());
// StringBuilder sb = new StringBuilder();
// for (byte b : hashedBytes) {
// sb.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));
// }
// return sb.toString();
// } catch (NoSuchAlgorithmException e) {
// e.printStackTrace();
// return null;
// }
// }
// public String hashPassword(String password) {
// if (password == null) {
// // Handle the null password scenario, throw an exception, or return a default value
// // For example, throwing an IllegalArgumentException
// throw new IllegalArgumentException("Password cannot be null");
// }
//
// try {
// MessageDigest md = MessageDigest.getInstance("SHA-256");
// byte[] hashedBytes = md.digest(password.getBytes());
// StringBuilder sb = new StringBuilder();
// for (byte b : hashedBytes) {
// sb.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));
// }
// return sb.toString();
// } catch (NoSuchAlgorithmException e) {
// e.printStackTrace();
// return null;
// }
// }
public String hashPassword(String password) {
if (password == null) {
throw new IllegalArgumentException("Password cannot be null");
}
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] hashedBytes = md.digest(password.getBytes(StandardCharsets.UTF_8));
// Rest of the hashing logic
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
return password;
}
//패스워드 업데이트
public void updatePassword(final String newPassword, final Users users) {
if (newPassword == null) throw new NullPointerException("NewPassword must not be null.");
if (newPassword.isEmpty()) throw new IllegalArgumentException("NewPassword must not be empty.");
if (users == null) throw new NullPointerException("User must not be null.");
String hashedPassword = hashPassword(newPassword);
if (hashedPassword != null) {
users.setHashedpassword(hashedPassword);
saveUser(users);
} else {
// 처리할 예외 상황에 대한 로직 추가
}
}
//패스워드 재해싱
public void rehashPassword(final String password, final Users users) {
this.updatePassword(password, users);
}
public void saveUser(final Users users) {
if (users == null) throw new NullPointerException("User must not be null");
userRepository.save(users);
}
}
------------------------------register.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<title>Register | LIKEDIAMOND</title>
<th:block th:insert="utils/imports.html :: meta"></th:block>
<th:block th:insert="utils/imports.html :: maincss"></th:block>
</head><!--/head-->
<body>
<th:block th:insert="utils/header.html :: header"></th:block>
<section id="form"><!--form-->
<div class="container">
<div class="row">
<div class="col-sm-6">
<div class="signup-form"><!--sign up form-->
<h2>회원가입</h2>
<form action="/register" method="post" >
<input type="text" placeholder="이름" name="lastname"/>
<input type="text" placeholder="성" name="firstname"/>
<input type="email" placeholder="이메일 주소" name="email"/>
<input type="hashedpassword" placeholder="비밀번호" name="hashedpassword"/>
<span>
아이디를 가지고 있습니까? <a href="/login">로그인</a>.
</span>
<br><br><br>
<p style="color: red" th:text="${error}"></p>
<button type="submit" class="btn btn-default">Signup</button>
</form>
</div><!--/sign up form-->
</div>
</div>
</div>
</section><!--/form-->
<th:block th:insert="utils/footer.html :: footer"></th:block>
<th:block th:insert="utils/imports.html :: mainjs"></th:block>
</body>
</html>
--------------------------------
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USERS_SEQ")
@SequenceGenerator(name = "USERS_SEQ", sequenceName = "USERS_SEQ", allocationSize = 1)
@Column(name = "usersid")
private Long usersid;