이전 게시글
https://changha-dev.tistory.com/147
에서 MySQL DB에 연결하는 것 까지 해봤습니다.
이번에는 저장된 정보 가지고
로그인을 할 수 있도록 구현 해보겠습니다.
@Controller
@RequiredArgsConstructor //MemberService에 대한 멤버를 사용 가능
public class MemberController {
// 생성자 주입
private final MemberService memberService;
// 회원가입 페이지 출력 요청
@GetMapping("/member/save")
public String saveForm() {
return "save";
}
@PostMapping("/member/save") // name값을 requestparam에 담아온다
public String save(@ModelAttribute MemberDTO memberDTO) {
System.out.println("MemberController.save");
System.out.println("memberDTO = " + memberDTO);
memberService.save(memberDTO);
return "login";
}
@GetMapping("/member/login")
public String loginForm(){
return "login";
}
@PostMapping("/member/login") // session : 로그인 유지
public String login(@ModelAttribute MemberDTO memberDTO, HttpSession session) {
MemberDTO loginResult = memberService.login(memberDTO);
if (loginResult != null) {
// login 성공
session.setAttribute("loginEmail", loginResult.getMemberEmail());
return "main";
} else {
// login 실패
return "login";
}
}
//MemberController.class
MemberController 클래스에 login GetMapping, PostMapping 내용을 추가하겠습니다.
save 메서드와 마찬가지로
login 메서드에도 MemberDTO 파라미터를 추가해서
웹페이지에서 클라이언트가 입력한 정보를 가져오겠습니다.
이제 MemberService쪽에 가서 login 메서드를 구현하겠습니다.
public MemberDTO login(MemberDTO memberDTO){ //entity객체는 service에서만
Optional<MemberEntity> byMemberEmail = memberRepository.findByMemberEmail(memberDTO.getMemberEmail());
if(byMemberEmail.isPresent()){
// 조회 결과가 있다
MemberEntity memberEntity = byMemberEmail.get(); // Optional에서 꺼냄
if(memberEntity.getMemberPassword().equals(memberDTO.getMemberPassword())) {
//비밀번호 일치
//entity -> dto 변환 후 리턴
MemberDTO dto = MemberDTO.toMemberDTO(memberEntity);
return dto;
} else {
//비밀번호 불일치
return null;
}
} else {
// 조회 결과가 없다
return null;
}
}
//MemberService.class
repository 저장소 안에 memberDTO 이메일 값을 findByMemberEmail 메서드로 찾아봅니다. => byMemberEmail
만약 있다면 비밀번호 일치유무를 파악합니다.
없다면 null로 리턴하겠습니다.
MemberRepository에서 findByMemberEmail 메서드를 만듭니다. => JPA 기능 중 하나
@Repository
public interface MemberRepository extends JpaRepository<MemberEntity, Long>//어떤 Entity인지, pk 어떤 타입인지
{
// 이메일로 회원 정보 조회( select * from member_table where member_email=?)
Optional<MemberEntity> findByMemberEmail(String memberEmail);
}
아까 MemberController에서
if (loginResult != null) {
// login 성공
session.setAttribute("loginEmail", loginResult.getMemberEmail());
return "main";
} else {
// login 실패
return "login";
}
//MemberController.class
리턴 할 main, login html을 만들어 주겠습니다.
여기서
session이란 : 로그인 같은 접속 정보를 저장해야 될 때 사용하는데, 다른 페이지로 이동할 때에도 로그인 상태 유지를 위해 쓰임
위에서 로그인 성공시 session에 loginEmail이라는 변수명으로 정보를 저장했습니다.
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>main</title>
</head>
<body>
session 값 확인 : <p th:text="${session.loginEmail}"></p>
</body>
</html>
<!-- main.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<form action="/member/login" method="post">
이메일 : <input type="text" name="memberEmail"> <br>
비밀번호 : <input type="password" name="memberPassword"> <br>
<input type="submit" value="로그인">
</form>
</body>
</html>
<!-- login.html -->
이제 실행해보겠습니다.
이전에 만든 아이디를 입력해서
로그인 하면 위와 같이 정상적으로 작동합니다.
다음 게시글에서는 DB에 저장된 회원정보를 리스트 형식으로 웹페이지에 출력해보겠습니다.
'개발' 카테고리의 다른 글
[Spring Boot] 회원 정보 조회 및 삭제 (0) | 2023.02.12 |
---|---|
[Spring Boot] 스프링 부트 회원 목록 출력하기 (0) | 2023.02.11 |
[Spring Boot] MySQL DB와 연동하기 (0) | 2023.02.10 |
[Spring Boot ] 웹페이지 정보 -> Controller (http method) (0) | 2023.02.09 |
[Spring Boot] 스프링부트 환경세팅 후 웹페이지 실행 (0) | 2023.02.09 |