기본 게시판이 완성되면 꼭 필요한 기능- 회원가입을 시작~~!.
필수 요구사항
- 회원가입, 로그인, 로그아웃, 회원목록, 회원상세정보, 회원정보수정, 회원탈퇴 - 총 7페이지 필요 (또는 AJAX 처리시 몇개 생략 가능)
- 자바 클래스 - Controller, ServiceImpl, Service(Interface), DAO, abstractDAO(맵 기본 기능 구현 완성된 메소드 집합체), CommandMap/TO(빈값 저장)
- XML 파일 **sql.xml (queryId) - CRUD 등록
- 필요한 쿼리 - CRUD // insert, select, update, update
추가 요구사항
- LoginInterceptor, AdminInterceptor 로 세션 처리하고 컨트롤러로 페이지 이동시 로그인 세션 확인
- AJAX 사용해서 회원가입시 회원 중복 불가 확인
- 비밀번호 찾기/ID 찾기 기능 구현
- 로그인 세션 유지- 쿠키에 저장하는 기능
- 비밀번호 DB에 저장시 암호화 처리- BCrypt 클래스 등 사용 가능
코드 분석
로그인 기능
요약: 로그인 처리시 로그인 정보를 확인할 VO/map과 로그인 정보를 세션에 저장할 HttpSession 필요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | MemberController @Controller // 현재 클래스를 스프링에서 관리하는 컨트롤러 bean으로 생성 @RequestMapping("/member/*") // 모든맵핑은 /member/를 상속 public class MemberController { // 로깅을 위한 변수 private static final Logger logger = LoggerFactory.getLogger(MemberController.class); // LOGIN 처리를 위한 메소드 컨테이너 @Inject MemberService memberService; // 01. 로그인 화면 @RequestMapping("login.do") public String login(){ return "member/login"; // views/member/login.jsp로 포워드 ViewResolver prefix,suffix 기억!! } // 02. 로그인 처리 @RequestMapping("loginCheck.do") public ModelAndView loginCheck(@ModelAttribute MemberVO vo, HttpSession session){ boolean result = memberService.loginCheck(vo, session); ------------------------------------ // -->>> memberService.loginCheck(vo, session) 접근!!! MemberService public interface MemberService { // 01_01. 회원 로그인 체크 public boolean loginCheck(MemberVO vo, HttpSession session); } MemberServiceImpl @Service // 현재 클래스를 스프링에서 관리하는 service bean으로 등록 public class MemberServiceImpl implements MemberService { @Inject MemberDAO memberDao; // 01_01. 회원 로그인체크 @Override public boolean loginCheck(MemberVO vo, HttpSession session) { boolean result = memberDao.loginCheck(vo); if (result) { // true일 경우 세션에 등록 MemberVO vo2 = viewMember(vo); // 세션 변수 등록 session.setAttribute("userId", vo2.getUserId()); session.setAttribute("userName", vo2.getUserName()); } return result; } MemberDAO public interface MemberDAO { // 01_01. 회원 로그인 체크 public boolean loginCheck(MemberVO vo); } MemberDAOImpl @Repository // 현재 클래스를 스프링에서 관리하는 dao bean으로 등록 public class MemberDAOImpl implements MemberDAO { // SqlSession 객체를 스프핑에서 생성하여 주입 // 의존관계 주입(Dependency Injection), 느슨한 결합 @Inject SqlSession sqlSession; // mybatis 실행 객체 // 01_01. 회원 로그인체크 @Override public boolean loginCheck(MemberVO vo) { String name = sqlSession.selectOne("member.loginCheck", vo); return (name == null) ? false : true; } MemberMapper.xml <!-- 다른 mapper와 중복되지 않도록 네임스페이스 기재 --> <mapper namespace="member"> <select id="loginCheck" resultType="String"> SELECT user_name AS userName FROM tbl_member WHERE user_id = #{userId} AND user_pw = #{userPw} </select> </mapper> // -->>> memberService.loginCheck(vo, session) 정보 가져와서 다시 돌아가기!!! ------------------------------------ //MemberController 이어서 ModelAndView mav = new ModelAndView(); if (result == true) { // 로그인 성공 // main.jsp로 이동 mav.setViewName("home"); mav.addObject("msg", "success"); } else { // 로그인 실패 // login.jsp로 이동 mav.setViewName("member/login"); mav.addObject("msg", "failure"); } return mav; } } ------------------------------ Login.jsp <script> $(document).ready(function(){ $("#btnLogin").click(function(){ // 태크.val() : 태그에 입력된 값 // 태크.val("값") : 태그의 값을 변경 var userId = $("#userId").val(); var userPw = $("#userPw").val(); if(userId == ""){ alert("아이디를 입력하세요."); $("#userId").focus(); // 입력포커스 이동 return; // 함수 종료 } if(userPw == ""){ alert("아이디를 입력하세요."); $("#userPw").focus(); return; } // 폼 내부의 데이터를 전송할 주소 document.form1.action="${path}/member/loginCheck.do" // 제출 document.form1.submit(); }); }); </script> </head> <body> <%@ include file="../include/menu.jsp" %> <h2>로그인</h2> <form name="form1" method="post"> <table border="1" width="400px"> <tr> <td>아이디</td> <td><input name="userId" id="userId"></td> </tr> <tr> <td>비밀번호</td> <td><input type="password" name="userPw" id="userPw"></td> </tr> <tr> <td colspan="2" align="center"> <button type="button" id="btnLogin">로그인</button> <c:if test="${msg == 'failure'}"> <div style="color: red"> 아이디 또는 비밀번호가 일치하지 않습니다. </div> </c:if> <c:if test="${msg == 'logout'}"> <div style="color: red"> 로그아웃되었습니다. </div> </c:if> </td> </tr> </table> </form> </body> </html> Main.jsp //로그인 상태 표시 <c:choose> <c:when test="${sessionScope.userId == null}"> <a href="${path}/member/login.do">로그인</a> </c:when> <c:otherwise> ${sessionScope.userName}님이 로그인중입니다. <a href="${path}/member/logout.do">로그아웃</a> </c:otherwise> </c:choose> | cs |
참고:
https://doublesprogramming.tistory.com/98
728x90
'700===Dev Project > 기본 게시판' 카테고리의 다른 글
매우 기초적인 회원가입시 공백 검증(Validation) (0) | 2019.01.17 |
---|---|
자동 로그인 처리 (0) | 2019.01.17 |