@PostMapping("/user/signup")
public String signupRequest(SignupRequestDto signupRequestDto){
userService.signup(signupRequestDto);
return "redirect:/user/login";
}
2.Service
package com.spring.loginprac.service;
import com.spring.loginprac.dto.SignupRequestDto;
import com.spring.loginprac.model.UserRoleEnum;
import com.spring.loginprac.model.Users;
import com.spring.loginprac.repository.UserRepository;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Service
public class UserService {
private final UserRepository userRepository;
private static final String ADMIN_TOKEN = "AAABnv/xRVklrnYxKZ0aHgTBcXukeZygoC";
public UserService(UserRepository userRepository){
this.userRepository = userRepository;
}
public void signup(SignupRequestDto signupRequestDto) {
String username = signupRequestDto.getUsername();
String password = signupRequestDto.getPassword();
String email = signupRequestDto.getEmail();
UserRoleEnum role = UserRoleEnum.USER;
Optional<Users> found = userRepository.findByUsername(username);
if(found.isPresent()){
throw new IllegalArgumentException("중복된 ID가 존재합니다.");
}
if(signupRequestDto.isAdmin()){
if(!signupRequestDto.getAdminToken().equals(ADMIN_TOKEN)){
throw new IllegalArgumentException("관리자 암호가 틀립니다.");
}
role = UserRoleEnum.ADMIN;
}
Users users = new Users(username, password, email, role);
userRepository.save(users);
}
}
3.Entity
package com.spring.loginprac.model;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
@Setter
@Getter // get 함수를 일괄적으로 만들어줍니다.
@NoArgsConstructor // 기본 생성자를 만들어줍니다.
@Entity // DB 테이블 역할을 합니다.
public class Users {
// ID가 자동으로 생성 및 증가합니다.
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
// nullable: null 허용 여부
// unique: 중복 허용 여부 (false 일때 중복 허용)
@Column(nullable = false, unique = true)
private String username;
@Column(nullable = false)
private String password;
@Column(nullable = false, unique = true)
private String email;
@Column(nullable = false)
@Enumerated(value = EnumType.STRING)
private UserRoleEnum role;
public Users(String username, String password, String email, UserRoleEnum role) {
this.username = username;
this.password = password;
this.email = email;
this.role = role;
}
}
package com.spring.loginprac.model;
public enum UserRoleEnum {
USER, // 사용자 권한
ADMIN // 관리자 권한
}
4.Repository
package com.spring.loginprac.repository;
import com.spring.loginprac.model.Notice;
import com.spring.loginprac.model.Users;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface UserRepository extends JpaRepository<Users,Long> {
Optional<Users> findByUsername(String username);
}
프론트에서 form 태그에 담아서 넘겼기 때문에 Controller 매개변수에 어노테이션을 생략했다.
서비스에선 중복된 이메일이 있는지, 토큰값이 정확한지 확인한다.
이후 User를 객체화 한 후 Repository에 저장한다.