700===Dev Project/기본 게시판

회원가입

블로글러 2019. 1. 14. 14:07

기본 게시판이 완성되면 꼭 필요한 기능- 회원가입을 시작~~!. 





필수 요구사항

  • 회원가입, 로그인, 로그아웃, 회원목록, 회원상세정보, 회원정보수정, 회원탈퇴 - 총 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