스프링/스프링 MVC 패턴

상품 등록 전 로그인하기 - 회원가입 페이지 만들기

chanhee01 2023. 2. 28. 14:19

상품을 등록하고 수정하는데 아무나 할 수가 있기 때문에 상품 등록을 하기전에 로그인 페이지를 만들어서 로그인이 된 사람만 상품 등록 및 수정을 할 수 있도록 만들 것이다.

 

 

java.hello.login.domain.member에

Member 객체 클래스 생성

@Data
public class Member {

    private Long id;

    @NotEmpty
    private String loginId; // 로그인 ID
    @NotEmpty
    private String name; // 사용자 이름
    @NotEmpty
    private String password;
}

 

MemberRepository 클래스 생성

@Slf4j
@Repository
public class MemberRepository {

    private static Map<Long, Member> store = new HashMap<>(); // static 사용
    private static long sequence = 0L; // static 사용

    public Member save(Member member) {
        member.setId(++sequence);
        log.info("save: member={}", member);
        store.put(member.getId(), member);
        return member;
    }

    public Member findById(Long id) {
        return store.get(id);
    }

    public Optional<Member> findByLoginId(String loginId) {
        List<Member> all = findAll();
        for (Member m : all) {
            if (m.getLoginId().equals(loginId)) {
                return Optional.of(m);
            }
        }
        return Optional.empty();
    }

    public List<Member> findAll() {
        return new ArrayList<>(store.values());
    }

    public void clearStore() {
        store.clear();
    }
}

Member와 MemberRepository는 항상 해왔던 과정이기 때문에 자세한 설명을 생략하도록 하겠다.

 

이전 게시글에서는 url을 연결할 때 home 화면을 상품 목록 페이지로 이동하게 했다.

이번에는 상품 목록 페이지로 바로 이동하지 않고 로그인 페이지를 무조건 거쳐야하도록 설계할 것이다.

 

@Slf4j
@Controller
public class HomeController {

    @GetMapping("/")
    public String home() {
        return "home";
    }
}

home.html은 생략(실제로 코딩하지 않고 복사 붙여넣기 했음)

 localhost:8080으로 들어가면 회원 가입과 로그인을 할 수 있는 홈 화면이 나온다.

 

 

 

 

 

@Controller
@RequiredArgsConstructor
@RequestMapping("/members")
public class MemberController {

    private final MemberRepository memberRepository;

    @GetMapping("/add")
    public String addForm(@ModelAttribute("member") Member member) {
        return "members/addMemberForm";
    }

    @PostMapping("/add")
    public String save(@Valid @ModelAttribute Member member, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return "members/addMemberForm";
        }

        memberRepository.save(member);
        return "redirect:/";
    }
}

컨트롤러에서 회원가입을 처리할 것이다. 저번에 배웠던 bindingReuslt를 통해서 값이 입력되지 않으면 오류가 나면서 페이지로 다시 돌아오고, 오류가 나지 않으면 홈 페이지로 리다이렉트를 한다.

 

홈 화면에서 회원가입을 누르면 /member/add로 이동하고 회원가입을 할 수 있는 페이지로 들어간다.

멤버 객체에 @NotEmpty가 있으므로 아무것도 입력하지 않고 회원 가입을 누르려하면 각각의 오류메시지를 출력하고 페이지에서 넘어가지 않는다.