rest controller practice : send email(reset user password)
This commit is contained in:
File diff suppressed because it is too large
Load Diff
BIN
rest-controller-practice/logs/spring-jpa.log.2021-03-22.0.gz
Normal file
BIN
rest-controller-practice/logs/spring-jpa.log.2021-03-22.0.gz
Normal file
Binary file not shown.
@@ -12,6 +12,6 @@ public class WebMvcConfiguration implements WebMvcConfigurer {
|
|||||||
public void addInterceptors(InterceptorRegistry registry) {
|
public void addInterceptors(InterceptorRegistry registry) {
|
||||||
registry.addInterceptor(new CommonInterceptor())
|
registry.addInterceptor(new CommonInterceptor())
|
||||||
.addPathPatterns("/api/**")
|
.addPathPatterns("/api/**")
|
||||||
.excludePathPatterns("/api/public/*");
|
.excludePathPatterns("/api/public/**");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,4 @@ public class MailTemplate {
|
|||||||
private String sendUserName;
|
private String sendUserName;
|
||||||
|
|
||||||
private LocalDateTime regDate;
|
private LocalDateTime regDate;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -412,4 +412,15 @@ public class ApiUserController {
|
|||||||
ServiceResult result = userService.addUser(userInput);
|
ServiceResult result = userService.addUser(userInput);
|
||||||
return ResponseResult.result(result);
|
return ResponseResult.result(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/api/public/user/password/reset")
|
||||||
|
public ResponseEntity<?> chapter5_3(@RequestBody @Valid UserPasswordResetInput userPasswordResetInput,
|
||||||
|
BindingResult bindingResult) {
|
||||||
|
if (bindingResult.hasFieldErrors()) {
|
||||||
|
return ResponseResult.fail("입력값이 정확하지 않습니다.", ResponseError.of(bindingResult.getFieldErrors()));
|
||||||
|
}
|
||||||
|
|
||||||
|
ServiceResult result = userService.resetPassword(userPasswordResetInput);
|
||||||
|
return ResponseResult.result(result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -41,6 +41,10 @@ public class User {
|
|||||||
@Column
|
@Column
|
||||||
private boolean lockYn;
|
private boolean lockYn;
|
||||||
|
|
||||||
|
private boolean passwordResetYn;
|
||||||
|
|
||||||
|
private String passwordResetKey;
|
||||||
|
|
||||||
private LocalDateTime regDate;
|
private LocalDateTime regDate;
|
||||||
private LocalDateTime updateDate;
|
private LocalDateTime updateDate;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package com.example.restcontroller.user.model;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import javax.validation.constraints.Email;
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class UserPasswordResetInput {
|
||||||
|
|
||||||
|
@Email(message = "이메일 형식이 아닙니다.")
|
||||||
|
@NotBlank(message = "이메일은 필수 입력사항입니다.")
|
||||||
|
private String email;
|
||||||
|
|
||||||
|
@NotBlank(message = "이름은 필수 입력사항입니다.")
|
||||||
|
private String userName;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -18,8 +18,8 @@ public interface UserRepository extends JpaRepository<User, Long> {
|
|||||||
|
|
||||||
Optional<User> findByIdAndPassword(Long id, String password);
|
Optional<User> findByIdAndPassword(Long id, String password);
|
||||||
Optional<User> findByUserNameAndPhone(String userName, String phone);
|
Optional<User> findByUserNameAndPhone(String userName, String phone);
|
||||||
|
|
||||||
Optional<User> findByEmail(String email);
|
Optional<User> findByEmail(String email);
|
||||||
|
Optional<User> findByEmailAndUserName(String email, String userName);
|
||||||
|
|
||||||
List<User> findByEmailContainsAndUserNameContainsAndPhoneContains(String email, String userName, String phone);
|
List<User> findByEmailContainsAndUserNameContainsAndPhoneContains(String email, String userName, String phone);
|
||||||
|
|
||||||
|
|||||||
@@ -27,4 +27,6 @@ public interface UserService {
|
|||||||
ServiceResult addUser(UserInput userInput);
|
ServiceResult addUser(UserInput userInput);
|
||||||
|
|
||||||
void sendServiceNotice();
|
void sendServiceNotice();
|
||||||
|
|
||||||
|
ServiceResult resetPassword(UserPasswordResetInput userPasswordResetInput);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import java.time.LocalDateTime;
|
|||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@@ -202,4 +203,32 @@ public class UserServiceImpl implements UserService {
|
|||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
@Override
|
||||||
|
public ServiceResult resetPassword(UserPasswordResetInput userPasswordResetInput) {
|
||||||
|
User userEntity = userRepository.findByEmailAndUserName(userPasswordResetInput.getEmail(), userPasswordResetInput.getUserName())
|
||||||
|
.orElseThrow(() -> new BizException("회원 정보가 존재하지 않습니다."));
|
||||||
|
|
||||||
|
String passwordResetKey = UUID.randomUUID().toString();
|
||||||
|
userEntity.setPasswordResetYn(true);
|
||||||
|
userEntity.setPasswordResetKey(passwordResetKey);
|
||||||
|
|
||||||
|
MailTemplate mailTemplate = mailTemplateRepository.findByTemplateId("USER_RESET_PASSWORD")
|
||||||
|
.orElseThrow(() -> new BizException("템플릿이 존재하지 않습니다."));
|
||||||
|
|
||||||
|
String serverUrl = "http://localhost:8080";
|
||||||
|
String title = mailTemplate.getTitle().replaceAll("\\{USER_NAME}", userEntity.getUserName());
|
||||||
|
String contents = mailTemplate.getContents()
|
||||||
|
.replaceAll("\\{USER_NAME}", userEntity.getUserName())
|
||||||
|
.replaceAll("\\{SERVER_URL}", serverUrl
|
||||||
|
.replaceAll("\\{RESET_PASSWORD_KEY}", passwordResetKey));
|
||||||
|
|
||||||
|
String fromEmail = mailTemplate.getSendEmail();
|
||||||
|
String fromUserName = mailTemplate.getSendUserName();
|
||||||
|
|
||||||
|
mailComponent.send(fromEmail, fromUserName, userEntity.getEmail(), userEntity.getUserName(), title, contents);
|
||||||
|
|
||||||
|
return ServiceResult.success();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
|
|
||||||
insert into user(email, password, phone, reg_date, user_name, status, lock_yn)
|
insert into user(email, password, phone, reg_date, user_name, status, lock_yn, password_reset_yn)
|
||||||
values
|
values
|
||||||
('haerong22@gmail.com', '$2a$10$2ElPbt2mwiAc9IYH3rgJz.YZInXlUd363utdyU0TWfne6Y3vKh8h6', '010-1234-1234', '2021-02-20 00:50:11.000000', 'kim', 'USING', 0),
|
('haerong22@gmail.com', '$2a$10$2ElPbt2mwiAc9IYH3rgJz.YZInXlUd363utdyU0TWfne6Y3vKh8h6', '010-1234-1234', '2021-02-20 00:50:11.000000', 'kim', 'USING', 0, 0),
|
||||||
('test22@test.com', '$2a$10$2ElPbt2mwiAc9IYH3rgJz.YZInXlUd363utdyU0TWfne6Y3vKh8h6', '010-4321-1111', '2021-02-25 12:33:16.000000', 'lee', 'USING', 0),
|
('test22@test.com', '$2a$10$2ElPbt2mwiAc9IYH3rgJz.YZInXlUd363utdyU0TWfne6Y3vKh8h6', '010-4321-1111', '2021-02-25 12:33:16.000000', 'lee', 'USING', 0, 0),
|
||||||
('test33@test.com', '$2a$10$2ElPbt2mwiAc9IYH3rgJz.YZInXlUd363utdyU0TWfne6Y3vKh8h6', '010-5555-3333', now(), 'hong', 'USING', 0),
|
('test33@test.com', '$2a$10$2ElPbt2mwiAc9IYH3rgJz.YZInXlUd363utdyU0TWfne6Y3vKh8h6', '010-5555-3333', now(), 'hong', 'USING', 0, 0),
|
||||||
('test44@test.com', '$2a$10$2ElPbt2mwiAc9IYH3rgJz.YZInXlUd363utdyU0TWfne6Y3vKh8h6', '010-4343-2546', now(), 'park', 'STOP', 0);
|
('test44@test.com', '$2a$10$2ElPbt2mwiAc9IYH3rgJz.YZInXlUd363utdyU0TWfne6Y3vKh8h6', '010-4343-2546', now(), 'park', 'STOP', 0, 0);
|
||||||
|
|
||||||
|
|
||||||
insert into notice(contents, reg_date, title, user_id)
|
insert into notice(contents, reg_date, title, user_id)
|
||||||
|
|||||||
Reference in New Issue
Block a user