Java Spring JSP웹페이지 만들기3(로그인 페이지)

호연지기·2023년 5월 22일
0

🌙 로그인 페이지 만들기(비번 일치여부 확인)

✏ 작업 순서

  1. 로그인 페이지가 될 jsp 파일을 생성(loginForm.jsp)
  2. Controller에서 로그인 페이지 넘겨주기 (로그인 화면, 처리)
  3. 로그인 처리 작성(Service)
    dao와 dto는 이전 단계에서 만들어두었으므로 로그인에 필요한 처리 위주로 작업한다.

로그인 처리 과정 세부 내용

암호화된 비밀번호를 DB로부터 검색하여 사용자가 입력한 비밀번호과 비교하는 작업

  • 사용자가 입력한 비밀번호 → 평문(plain text)
  • DB에 저장된 비밀번호 → 암호문(cipher text)

두 문자열은 단순 equlas 비교가 불가하므로 Spring Security 패스워드 인코더에서 mache를 사용한다.

이후 로그인 상황 유지를 위해 로그인 성공 정보를 세션(session)에 저장하고, 저장된 로그인 성공 정보는 로그아웃 시점에 제거한다.

🥙 로그인 페이지 생성(JSP)

💻 html 소스(header&footer)

header와 footer는 jsp:include 코드로 import 해온다.

<header>
  <jsp:include page="header.jsp"></jsp:include>
</header>
<footer>
  <jsp:include page="footer.jsp"></jsp:include>
</footer>

💻 html 소스 (login 영역)

<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>

🥙 Controller에서 로그인 페이지 넘겨주기 (로그인 화면, 처리)

💻 Controller 소스

@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 클래스로 이동하는 역할

🥙 로그인 처리 작성(Service)

💻 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;
}

🥙 로그인 동작 테스트

  1. 로그인 화면 불러오기
  1. 테스트용 아이디, 비밀번호 입력 후 로그인 버튼 클릭
  1. 로그인 성공

    로그인 후 나타날 게시판 페이지는 PagingUtil 클래스를 만들어서 따로 작업 필요

📅 DATE

2023.05.22 작성

profile
사람의 마음에 차 있는 너르고 크고 올바른 기운

0개의 댓글