dao와 dto는 이전 단계에서 만들어두었으므로 로그인에 필요한 처리 위주로 작업한다.
암호화된 비밀번호를 DB로부터 검색하여 사용자가 입력한 비밀번호과 비교하는 작업
두 문자열은 단순 equlas 비교가 불가하므로 Spring Security
패스워드 인코더에서 mache
를 사용한다.
이후 로그인 상황 유지를 위해 로그인 성공 정보를 세션(session)에 저장하고, 저장된 로그인 성공 정보는 로그아웃 시점에 제거한다.
header와 footer는 jsp:include 코드로 import 해온다.
<header>
<jsp:include page="header.jsp"></jsp:include>
</header>
<footer>
<jsp:include page="footer.jsp"></jsp:include>
</footer>
<section>
<div class="content">
<form action="loginProc" method="post" class="login-form">
<h2 class="login-header">로그인</h2>
<input type="text" class="login-input"
name="m_id" autofocus required
placeholder="아이디">
<input type="password" class="login-input"
name="m_pwd" placeholder="비밀번호" required>
<input type="submit" class="login-btn" value="로그인">
</form>
</div>
</section>
@GetMapping("loginForm")
public String loginForm(){
log.info("loginForm()");
return "loginForm";
}
@PostMapping("loginProc")
public String loginProc(MemberDto member,
HttpSession session,
RedirectAttributes rttr){
log.info("loginProc()");
String view = mServ.loginProc(member, session, rttr);
return view;
}
loginForm
은 만들어둔 로그인 페이지로 이동하고,
loginProc
는 로그인 처리 동작을 하는 Service 클래스로 이동하는 역할
public String loginProc(MemberDto member,
HttpSession session,
RedirectAttributes rttr){
log.info("loginProc()");
String view = null;
String msg = null;
//DB에서 회원의 비밀번호 구하기(암호문)
String encPwd = mDao.selectPass(member.getM_id());
//encPwd에 담겨있을 수 있는 데이터
// 1) null : 비회원인 경우
// 2) 암호화된 비밀번호 문자열 : 회원인 경우
if(encPwd != null){
//아이디는 맞음.(회원의 아이디)
if(pEncoder.matches(member.getM_pwd(), encPwd)){
//matches 메소드 : Spring Security 에서 제공하는
//암호문과 평문 비교 메소드.
//matches(평문, 암호문) 형식으로 작성하면,
//같은 값일 때 true, 다르면 false를 출력.
//비밀번호가 맞는 경우
//세션에 로그인 성공정보(접속자 정보) 저장.
// 저장할 회원 정보 : id, name, point, g_name
member = mDao.selectMember(member.getM_id());
//세션에 DTO 저장.
session.setAttribute("mb", member);
//로그인 성공 후 게시판 목록으로 이동.
//일단 첫페이지로 이동.(나중에 변경할 예정임.)
view = "redirect:list?pageNum=1";
msg = "로그인 성공";
} else {
//비밀번호가 틀린 경우
view = "redirect:loginForm";
msg = "비밀번호가 틀립니다.";
}
} else {
//아이디 없음.(비회원)
view = "redirect:loginForm";
msg = "아이디가 존재하지 않습니다.";
}
rttr.addFlashAttribute("msg", msg);
return view;
}
- 로그인 화면 불러오기
- 테스트용 아이디, 비밀번호 입력 후 로그인 버튼 클릭
- 로그인 성공
로그인 후 나타날 게시판 페이지는 PagingUtil 클래스를 만들어서 따로 작업 필요
2023.05.22 작성