'Back-End'에 해당되는 글 287건

  1. 2019.09.17 회원 가입시 아이디 중복 확인 추가 (내 프로젝트에 적용)
  2. 2019.09.10 회원 가입시 이메일 중복 확인 추가 (내 프로젝트에 적용)
  3. 2019.09.04 오라클에서 조건문 사용
  4. 2019.09.03 데이터베이스 sql export 및 import
  5. 2019.08.31 오라클 db export 방법
  6. 2019.08.29 페이스북 연동 로그인 API
  7. 2019.08.29 카카오톡 연동 로그인 API
  8. 2019.08.28 Spring 비밀번호 찾기 기능 변경 (내 프로젝트 적용) 6

회원 가입시 아이디 중복 확인 추가 (내 프로젝트에 적용)

Back-End/Spring 2019. 9. 17. 13:59

회원가입 페이지에서 아이디 "중복확인" 버튼을 누르면 중복된 아이디가 있을시에는 경고창이 출력되고,


중복된 아이디가 없을시에는 아이디를 사용할 수 있다고 출력됨.



join.jsp (회원가입 페이지)


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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<%@ include file="../include/header.jsp"%>
<%@ include file="../include/menu.jsp"%><br>
<!-- 회원가입 페이지 -->
<body>
<center>
<table border="1" width="450" height="400">
    
        <br> <br>
        <center>
        <span style="color: green; font-weight: bold;">회원가입</span> <br> <br>
        
        <div style="text-align:center;">
            <tr>        
                <td>
                    
                        <!-- 받아온 아이디가 없을때, 즉 처음 이 페이지가 출력되었을 때-->
                        
                        <c:if test = "${user_id == null}">
                        <form action="join_id_check.do${e_mail}" method="post">
                    <center>
                        <div>    
                            아이디 : <input type="text" name="user_id" placeholder="  ID를 입력하세요. ">  <button type="submit" name="submit">중복확인</button>
                            
                            
                                                    
                        </div>
                        <br>
                        <div>
                            비밀번호 : <input type="password" name="member_pass"
                                placeholder="  비밀번호를 입력하세요. ">
                        </div>
                        <br>
                        <div>
                            인증받은 이메일 : ${e_mail}
                        </div>                        
                        
                        <!-- 이메일은 인증받은 이메일을 사용해야 하므로 컨트롤러에서 이메일을 가져와서 사용함 -->
                        <!-- 가져온후에 다시 컨트롤러로 넘긴후에 db에 저장하는 식으로 진행 -->
                        
                        <br> <br>
                        <button type="submit" name="submit">회원가입</button>
                    </center>
                        </div>
                    </td>
                </tr>
            </table>
            </center>
        </form>
                            </c:if>

                     <!-- 아이디 중복확인을 한 후에 아이디를 받아왔을 경우에 출력되는 부분 -->

                        <c:if test = "${user_id != null}">
                        <form action="join_check.do${user_id},${e_mail}" method="post">
                    <center>
                        <div>
                            아이디 : ${user_id}
                                                    
                        </div>
                        <br>
                        <div>
                            비밀번호 : <input type="password" name="member_pass"
                                placeholder="  비밀번호를 입력하세요. ">
                        </div>
                        <br>
                        <div>
                            인증받은 이메일 : ${e_mail}
                        </div>                        
                        
                        <!-- 이메일은 인증받은 이메일을 사용해야 하므로 컨트롤러에서 이메일을 가져와서 사용함 -->
                        <!-- 가져온후에 다시 컨트롤러로 넘긴후에 db에 저장하는 식으로 진행 -->
                        
                        <br> <br>
                        <button type="submit" name="submit">회원가입</button>
                    </center>
                        </div>
                    </td>
                </tr>
            </table>
            </center>
        </form>
                            </c:if>    
        </center>
<br><br><%@ include file="../include/Botton.jsp"%>
</body>
</html>
cs




MemberController.java 중 일부


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
//id 중복확인을 하는 메소드
    @RequestMapping("/member/join_id_check.do{e_mail}")
    public ModelAndView id_check(String user_id, HttpServletResponse response_equals, @PathVariable String e_mail) throws Exception    {
        
        
        memberservice.join_id_check(user_id);
        
    //id가 기존 db에 저장되어 있지 않을 경우 실행되는 부분
    if(memberservice.join_id_check(user_id)) {
        
        response_equals.setContentType("text/html; charset=UTF-8");
        PrintWriter out_equals = response_equals.getWriter();
        out_equals.println("<script>alert('사용하실 수 있는 아이디 입니다.');</script>");
        out_equals.flush();
        
        ModelAndView mv = new ModelAndView();
        
        mv.setViewName("/member/join");
        
        mv.addObject("e_mail", e_mail);
        
        mv.addObject("user_id",user_id);
        
        return mv;
        
    //id가 기존 db에 저장되어 있을 경우 id가 중복된 것으므로 이쪽 구문이 실행된다.
    
else {

        response_equals.setContentType("text/html; charset=UTF-8");

        PrintWriter out_equals = response_equals.getWriter();

        out_equals.println("<script>alert('사용할 수 없는 아이디 입니다. 다른 아이디를 입력해주세요.'); history.go(-1);</script>");
        
out_equals.flush();
        
    }
    
    ModelAndView mv = new ModelAndView();

    mv.setViewName("/member/join");
    
        return mv;
    }

cs



MemberServiceImpl.java 중 일부


1
2
3
4
5
6
7
8

//아이디 중복 확인
    @Override
    public boolean join_id_check(String user_id) throws Exception {
    
//참, 거짓을 판별해서 리턴함
        boolean result = memberdao.join_id_check(user_id);
        
        return result;
    }
cs



MemberDAOImpl.java 중 일부


삼항 연산자를 사용해서 user의 id가 기존에 저장되어 있는 데이터라면 false를 리턴하고,


기존에 저장되어 있지 않은 데이터라면 true를 리턴하게 한다.


1
2
3
4
5
6
7
8
9
@Override
    public boolean join_id_check(String user_id) throws Exception {
 
        String user_id1 = sqlSession.selectOne("member.join_id_check", user_id);
    
        //조건식 ? true일때의 값 : false일때의 값

        return (user_id1==null) ? true : false;
    }
    
cs



MemberMapper.xml 중 일부


1
2
3
4
5
    
<!-- 아이디 중복확인 관련 mapper-->

    <select id = "join_id_check" resultType = "String" >
        select user_id from member
        where user_id=#{user_id}

    </select>       
cs




:

회원 가입시 이메일 중복 확인 추가 (내 프로젝트에 적용)

Back-End/Spring 2019. 9. 10. 15:27

기존 - 회원가입전 인증번호를 이메일로 발송해 인증번호가 맞으면 회원가입 페이지로 이동해 회원가입 진행


변경 - 회원가입전 이메일 중복확인을해서 중복되지 않으면 인증번호를 이메일로 발송해 인증번호가 맞으면 

회원가입 페이지로 이동해서 회원가입을 진행시킨다.




email.jsp


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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<%@ include file="../include/header.jsp"%>
 
 
 
 
</head>
<%@ include file="../include/menu.jsp"%><br>
<body>
 
 
 
<table border="1" width="300" height="300" align= "center">
<center>
<span style="color: green; font-weight: bold;">이메일 인증 (이메일을 인증 받아야 다음 단계로 넘어갈 수 있습니다.)</span> <br> <br>    
        <br> <br>
        <div style="text-align:center;">
            <tr>        
                <td>
                <center>
        
  <!-- 넘겨받은 이메일이 없을시 출력되는 구문  -->


 <c:if test = "${e_mail == null}">
                        <div>
                        <form action="email_check.do" method="post">
                            이메일 : <input type="email" name="e_mail" placeholder="  이메일주소를 입력하세요. "><br><br
                                
                                <button type="submit" name="submit">중복확인</button></form>
                        </div>                                                    
        </c:if>
 


       
 
  <!-- 넘겨받은 이메일이 있을시에 출력되는 구문, 이메일 중복확인을 한 후에 다른 이메일로 변경하지 못하도록 이메일 값을 그대로 받아옴  -->

        <c:if test = "${e_mail != null}">
 <div>
                    <form action="auth.do${e_mail}" method="post">
                    
                    <center>
                        <br>이메일 : ${e_mail}
                        <br> <br>
                        <button type="submit" name="submit">이메일 인증받기 (이메일 보내기)</button>
 
                        </div>
                        </c:if>
        
                   
                    </td>
                </tr>
                    </center>
            </table>
        </form>
</center>
<br><br><%@ include file="../include/Botton.jsp"%>
</body>
</html>
cs




MemberController.java 중 일부


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
//이메일 중복확인을 하는 메소드
    @RequestMapping("/member/email_check.do")
    public ModelAndView email_check(String e_mail, HttpServletResponse response_equals) throws Exception    {
        
        memberservice.email_check(e_mail);
        
    if(memberservice.email_check(e_mail)) {
        
        response_equals.setContentType("text/html; charset=UTF-8");
        PrintWriter out_equals = response_equals.getWriter();
        out_equals.println("<script>alert('사용하실 수 있는 이메일 입니다.');</script>");
        out_equals.flush();
        
        ModelAndView mv = new ModelAndView();
        
        mv.setViewName("/member/email");
        
        mv.addObject("e_mail",e_mail);
        
        return mv;
        
        
    } else {
        response_equals.setContentType("text/html; charset=UTF-8");
        PrintWriter out_equals = response_equals.getWriter();
        out_equals.println("<script>alert('사용할 수 없는 이메일 입니다. 다른 이메일을 입력해주세요.'); history.go(-1);</script>");
        out_equals.flush();
        
    }
    
    ModelAndView mv = new ModelAndView();
    mv.setViewName("/member/email");
    
 
        return mv;
    }
cs




MemberServiceImpl.java 중 일부


1
2
3
4
5
6
7
8
9
//이메일 중복 확인
    @Override
    public boolean email_check(String e_mail) throws Exception{
        
        boolean result = memberdao.email_check(e_mail);
        
        return result;
        
    }
cs




MemberDAOImpl.java 중 일부


1
2
3
4
5
6
7
8
9
@Override
    public boolean email_check(String e_mail) throws Exception {
        String email
        =sqlSession.selectOne("member.email_check", e_mail);
    
       //조건식 ? true일때의 값 : false일때의 값
//이메일이 null이면 db에 저장되어 있지 않은 (중복되지 않은) 이메일이므로 true를 리턴함
        return (email==null) ? true : false;
        
    }
cs




memberMapper.xml 중 일부


1
2
3
4
5
<!-- 이메일 중복확인 관련 mapper-->
    <select id = "email_checkresultType="String">
        select e_mail from member
        where e_mail=#{e_mail}
    </select>    
cs




:

오라클에서 조건문 사용

Back-End/Data Base 2019. 9. 4. 19:44

  

  if문 : if ~ end if


  EX) if (조건) then


 실행명령;


 else if (조건) then 


 실행명령;


 else 실행명령;


 end if;





  case문 : case ~ end


  EX)    case 변수명


when 값 1 then 실행명령;


when 값 2 then 실행명령;


...


end;




- case문 예제 -


1
2
3
4
5
6
7
8
<!-- 페이징 처리 -->    

    <select id="countArticle" resultType="int">

    <!-- 페이징 처리를 할때 만약 45개 글이 있으면 3개의 페이지만 나와야하는데 if문을 사용하지 않고 무조건 1을 더하면 비어있는 페이지인 4페이지까지
    출력이 되기때문에 if문을 사용해서 게시글 수로 나눴을때 나머지가 0이나오면 그대로 출력하고, 0이 아니면 +1을 해준다 --!>

        select case when count(*) / 15 = 0 then count(*) / 15 + 1
        else count(*) / 15 end from member_board

        <include refid="search" />

    </select>
cs


:

데이터베이스 sql export 및 import

Back-End/Data Base 2019. 9. 3. 11:09


1. SQL Developer 을 실행해서 도구 -> 데이터베이스 export를 선택




2. sqldeveloper에 등록해둔 계정(schema) 중에서 작업할 계정을 선택




3. DDL export 부분을 체크하면 스크립트가 만들어지는데 고려해야될 사항들이 몇가지 있다.


  

  - 스키마 표시(S) : 스크립트에 현재 스키마가 포함되어 생성됩니다. 옮기려고 하는 데이터베이스에 스키마(아이디)가 다르다면 체크를 해제 하면 되겠습니다.


  - 저장 영역(G) : 스크립트에 테이블스페이스와 storage 관련 구문들이 포함되어 집니다. 옮기려는 데이터베이스의 테이블스페이스가 다르다면 생성 후 수정을 하거나, 체크를 해제 하고 생성해서 테이블스페이스 부분은 수동으로 추가해서 사용해야 겠습니다. 만약 옮기려는 데이터베이스 버전이 현재 데이터베이스와 다르다면(11g 에서 10g 로 옮기는 등) storage 지정 구문이 달라서 import 시 문법 오류가 발생할 수 있습니다. 이런 상황이 발생한다면 스크립트 생성후에 직접 수정하여 사용하여야 겠습니다.




4. 데이터 export 부분을 체크하고 설정합니다. 형식에는 다음과 같은 종류가 있습니다.


  * insert : 데이터를 insert sql 문으로 만들어 줍니다. 주의할 사항은 테이블에 CLOB 타입의 필드는 제외 됩니다.


  * csv : 데이터가 콤마로 분리된 텍스트파일로 만들어 줍니다.

  * excel 2003+(xlsx) : 엑셀 .xlsx 파일로 만들어 줍니다.

  * excel 95-2003(xls) : 엑셀 .xls 파일로 만들어 줍니다.

  * loader : SQL Loader 용 컨트롤 파일과 데이터 파일로 만들어 줍니다.


5. 다른 이름으로 저장 (V) 을 선택합니다. 다음과 같은 종류가 있습니다.



  - 단일 파일 : 익스포트 데이터를 하나의 파일로 만들어 줍니다. 형식이 insert 일때만 사용할 수 있습니다.


  - 별도의 파일 : 테이블, 제약사항 등 모두 데이터베이스 객체를 별도의 파일로 만들어 줍니다. 데이터는 테이블 별로 별도의 파일에 생성됩니다.

  - 유형 파일 : 테이블, 인덱스, 제약사항 등 유형별 파일로 생성스크립트를 만들어줍니다. 데이터는 테이블 별로 별도의 파일에 생성됩니다.


7. 인코딩 유형은 백업일 경우 현재 데이터베이스의 캐릭터셋에 맞추고 옮기는 경우는 대상 데이터베이스의

캐릭터셋에 맞추면 되겠습니다.



8. 파일(F) 항목에서 생성될 파일 이름을 저장합니다. insert 형식에서 단일 파일로 저장할 경우 파일명을 지정하고,

별도의 파일이나 유형 파일을 사용할 경우에는 폴더를 지정합니다.


9. 다음 단계는 export 단계로 표준객체 유형에서 export 할 항목만 체크하면 됩니다.




10. 다음으로 export할 객체를 지정하는 단계이다.

상단의 조회를 눌러서 보여지는 리스트중에서 선택하고, 화살표를 사용해서 export할 자료를 선택하면 된다.







11. 다음 단계는 테이블 데이터중에 특정열을 선택해서 export할 수 있는데, 테이블의 열 항목을 클릭하면

연필 모양의 아이콘이 생기는데 거기서 export할 열을 선택할 수 있습니다.

따로 선택하지 않았을 시에는 전체 export가 됩니다.




12. 완료를 눌러서 export를 하면 된다.





import 하는 방법


만들어진 sql파일을 그대로 드래그해서 insert를 하면 된다.








출처

https://offbyone.tistory.com/162

:

오라클 db export 방법

Back-End/Data Base 2019. 8. 31. 19:41

출처

https://offbyone.tistory.com/162

:

페이스북 연동 로그인 API

Back-End/Spring 2019. 8. 29. 15:39

페이스북 로그인 관련


엑세스 토큰 관련 설명은 카카오톡 API 참고.



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
<!-- 페이스북 아이디를 연동해서 로그인 -->
 
 <center>
<button type"button" id"loginBtn" ><img src="C:/img/facelogin.png"/>페이스북 로그인</button>
 </center>
 
            <div id="access_token"></div>
            <div id="user_id"></div>
            <div id="name"></div>
            <div id="email"></div>
            <div id="gender"></div>
            <div id="birthday"></div>
            <div id="id"></div>            
            
<script>
function getUserData() { //유저의 데이터를 가지고 오는 함수
    /* FB.api('/me', function(response) {
        document.getElementById('response').innerHTML = 'Hello ' + response.name;
        console.log(response);
    }); */
    FB.api('/me', {fields: 'name,email'}function(response) {

//유저의 이름과 이메일을 가져오는 것이 성공하면 변수에 그 값을 저장시킨다.
        
        var facebookname = response.name;    //페이스북 아이디를 변수에 저장함
        var facebooke_mail = response.email;    //페이스북 이메일을 변수에 저장함
        
        //해당 주소로 이동
        window.location.replace("http://" + window.location.hostname + ( (location.port==""||location.port==undefined)?"":":" + location.port) + "/hansub_project/home?facebookname="+encodeURI(facebookname)+"&facebooke_mail="+facebooke_mail);
 
    });
}
  
window.fbAsyncInit = function() {
    //SDK loaded, initialize it
    FB.init({
        appId      : '488986078336253'//페이스북 개발자 홈페이지에서 앱을 등록하고, 앱 id를 받아온다.
        cookie     : true,  // enable cookies to allow the server to access
                // the session
        xfbml      : true,  // parse social plugins on this page
        version    : 'v3.3'     // 페이스북 개발자 홈페이지에서 버전을 확인한 후 작성한다.
    });
  
    //check user session and refresh it

//유저의 로그인 상태를 판단하는 함수, 로그인이 되어있다면 해당 유저의 데이터를 가져온다.
    FB.getLoginStatus(function(response) {
        if (response.status === 'connected') {        //만약 정상적으로 실행되었다면 유저의 데이터를 가져온다.
            //user is authorized
            //document.getElementById('loginBtn').style.display = 'none';
            getUserData(); 
            
        
            
        } else {
            //user is not authorized
        }
    });
};
  
//load the JavaScript SDK
(function(d, s, id){
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) {return;}
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.com/ko_KR/sdk.js";
    fjs.parentNode.insertBefore(js, fjs);
}(document'script''facebook-jssdk'));
  
//add event listener to login button
document.getElementById('loginBtn').addEventListener('click'function() {
    //do the login
    FB.login(function(response) {
        if (response.authResponse) {

//엑세스 응답 토큰을 가져와 변수에 저장
            access_token = response.authResponse.accessToken; //get access token
            user_id = response.authResponse.userID; //get FB UID
//이메일을 가져와야 한다.


            console.log('access_token = '+access_token);
            console.log('user_id = '+user_id);
            //user just authorized your app
            //document.getElementById('loginBtn').style.display = 'none';
            getUserData();
        }
    }, {scope: 'email,public_profile,user_birthday',
        return_scopes: true});
}, false);
 
 
 
</script>
cs


:

카카오톡 연동 로그인 API

Back-End/Spring 2019. 8. 29. 15:16

카카오톡 로그인 관련



-access_token / refresh_token-


로그인을 하면 새로운 토큰이 만들어지고, access_token이 만료되기 직전에 refresh_token을 통해서 새로운 


access_token을 발급받으시면 됩니다.


꼭 갱신해야만 쓸 수 있는건 아니지만 사용자의 불편을 최소화할 수 있고, 보안상 유리하기 때문 (계속 새로 발급받기 때문에)



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
<!-- 카카오톡 아이디 연동해서 로그인 -->
<script src = "//developers.kakao.com/sdk/js/kakao.min.js"></script> //스크립트 타입을 kakao타입으로 함
<a id="kakao-login-btn"></a> //버튼의 id를 정함
<a href="http://developers.kakao.com/logout"></a> //로그아웃 링크를 설정
<script type='text/javascript'>
 
Kakao.init('bd21082a499aaa79b4c08e01935a8a70'); //아까 카카오개발자홈페이지에서 발급받은 자바스크립트 키를 입력함
 
//카카오 로그인 버튼을 생성합니다. 
 
Kakao.Auth.createLoginButton({ 
    container: '#kakao-login-btn'
    success: function(authObj) { //authObj가 참일때, 자료를 성공적으로 보냈을때 출력되는 부분
           Kakao.API.request({
 
               url: '/v1/user/me',
 
               success: function(res) { //res가 참일때, 자료를 성공적으로 보냈을때 출력되는 부분
 
                     console.log(res.id);//<---- 콘솔 로그에 id 정보 출력(id는 res안에 있기 때문에  res.id 로 불러온다)
 
                     console.log(res.kaccount_email);//<---- 콘솔 로그에 email 정보 출력 (어딨는지 알겠죠?)
 
                     console.log(res.properties['nickname']);//<---- 콘솔 로그에 닉네임 출력(properties에 있는 nickname 접근 
                             
                  // res.properties.nickname으로도 접근 가능 )
                     console.log(authObj.access_token);//<---- 콘솔 로그에 토큰값 출력
          
         
          var kakaonickname = res.properties.nickname;    //카카오톡 닉네임을 변수에 저장
          var kakaoe_mail = res.properties.kaccount_email;    //카카오톡 이메일을 변수에 저장함
         
          
 
//카카오톡의 닉네임과,mail을 url에 담아 같이 페이지를 이동한다.
          window.location.replace("http://" + window.location.hostname + ( (location.port==""||location.port==undefined)?"":":" + location.port) + "/hansub_project/home?kakaonickname="+kakaonickname+"&kakaoe_mail="+kakaoe_mail);
      
                   }
                 })
               },
               fail: function(error) { //에러 발생시 에러 메시지를 출력한다.
                 alert(JSON.stringify(error));
               }
             });
</script>
cs


:

Spring 비밀번호 찾기 기능 변경 (내 프로젝트 적용)

Back-End/Spring 2019. 8. 28. 16:40

- 현재(비밀번호 찾기)-


아이디와 이메일을 입력하면 비밀번호가 페이지에 출력됨




- 변경(비밀번호 변경) -


-> 아이디와 이메일을 입력한 후 확인 버튼을 누르면 해당 아이디와 이메일이 db에 저장되어 있을 경우에 입력한 이메일로 인증번호를 보내서 

인증번호를 입력하게 한 후에

인증번호가 맞을 경우에 비밀번호 변경 페이지로 이동하게해서 비밀번호를 변경하게한후에 db에 다시 변경한 비밀번호를 저장하게 할 예정



  view

  ㄴpass_email.jsp

  ㄴpass_change.jsp


  controller

  ㄴMemberController.java


  model

  ㄴMemberDAO.java

  ㄴMemberDAOImpl.java


  service

  ㄴMemberBoardService.java

  ㄴMemberBoardServiceImpl.java





pass_change.jsp

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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<%@ include file="../include/header.jsp"%>
<%@ include file="../include/menu.jsp"%><br>
<body>
 
<table border="1" width="300" height="300" align= "center">
<center>
<span style="color: green; font-weight: bold;">변경할 비밀번호를 입력해주세요.</span> <br> <br>    
        <br> <br>
        
        
        <div style="text-align:center;">
            <tr>        
                <td>
                <center>
                    <form action="pass_change.do${e_mail}" method="post">
                    
                    <center>
                        <br>
                        <div>
                            변경할 비밀번호 입력 : <input type = "number" name = "member_pass"
placeholder = "비밀번호를 입력하세요." >
                        </div>                                        
 
                        <br> <br>
                        <button type="submit" name="submit">비밀번호 변경</button>
 
                        </div>
                    </td>
                </tr>
                    </center>
            </table>
        </form>
</center>
 
 
</body>
</html>
cs



pass_email.jsp

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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<%@ include file="../include/header.jsp"%>
<%@ include file="../include/menu.jsp"%><br>
<body>
 
<table border="1" width="300" height="300" align"center">
<center>
<span style="color: green; font-weight: bold;">입력한 이메일로 받은 인증번호를 입력하세요. (인증번호가 맞아야 비밀번호를 변경하실 수 있습니다.)</span> <br> <br>    
        <br> <br>
        
        
        <div style="text-align:center;">
            <tr>        
                <td>
                <center>
                    <form action="pass_injeung.do${dice},${e_mail}" method="post">
                    
                    <center>
                        <br>
                        <div>
                            인증번호 입력 : <input type="number" name="pass_injeung"
                                placeholder="  인증번호를 입력하세요. ">
                        </div>                                        
 
                        <br> <br>
                        <button type="submit" name="submit">인증번호 전송</button>
 
                        </div>
                    </td>
                </tr>
                    </center>
            </table>
        </form>
</center>
 
 
</body>
</html>
cs



MemberController.java 중 일부

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
//비밀번호 찾기 처리 (1) 이메일 발송
        @RequestMapping(value = "find_pass.do", method = RequestMethod.POST)
        public ModelAndView find_pass(HttpServletRequest request, String user_id, String e_mail,
                HttpServletResponse response_email) throws IOException{
            
            //랜덤한 난수 (인증번호)를 생성해서 이메일로 보내고 그 인증번호를 입력하면 비밀번호를 변경할 수 있는 페이지로 이동시킴
            
            Random r = new Random();
            int dice = r.nextInt(157211)+48271;
            
            String setfrom = "dlgkstjq623@gmail.com";
            String tomail = request.getParameter("e_mail");    //받는 사람의 이메일
            String title = "비밀번호 찾기 인증 이메일 입니다.";    //제목
            String content =
            
                    System.getProperty("line.separator")+
                    
                    System.getProperty("line.separator")+
                            
                    "안녕하세요 회원님 저희 홈페이지를 찾아주셔서 감사합니다"
                    
                    +System.getProperty("line.separator")+
                    
                    System.getProperty("line.separator")+
            
                    "비밀번호 찾기 인증번호는 " +dice+ " 입니다. "
                    
                    +System.getProperty("line.separator")+
                    
                    System.getProperty("line.separator")+
                    
                    "받으신 인증번호를 홈페이지에 입력해 주시면 다음으로 넘어갑니다."// 내용
            
            try {
 
                MimeMessage message = mailSender.createMimeMessage();
                MimeMessageHelper messageHelper = new MimeMessageHelper(message, true"UTF-8");
 
                messageHelper.setFrom(setfrom); // 보내는사람 생략하면 정상작동을 안함
                messageHelper.setTo(tomail); // 받는사람 이메일
                messageHelper.setSubject(title); // 메일제목은 생략이 가능하다
                messageHelper.setText(content); // 메일 내용
                
                mailSender.send(message);
        
            } catch (Exception e) {
                System.out.println(e);
            }
            
            
            ModelAndView mv = new ModelAndView();    //ModelAndView로 보낼 페이지를 지정하고, 보낼 값을 지정한다.
            mv.setViewName("/member/pass_email");     //뷰의이름
            mv.addObject("dice", dice);
            mv.addObject("e_mail", e_mail);
            
            System.out.println("mv : "+mv);
 
            response_email.setContentType("text/html; charset=UTF-8");
            PrintWriter out_email = response_email.getWriter();
            out_email.println("<script>alert('이메일이 발송되었습니다. 인증번호를 입력해주세요.');</script>");
            out_email.flush();
            
            
            return mv;
            
        }
        
        
        //인증번호를 입력한 후에 확인 버튼을 누르면 자료가 넘어오는 컨트롤러
        @RequestMapping(value = "pass_injeung.do{dice},{e_mail}", method = RequestMethod.POST)
            public ModelAndView pass_injeung(String pass_injeung, @PathVariable String dice, @PathVariable String e_mail, 
                    HttpServletResponse response_equals) throws IOException{
            
            System.out.println("마지막 : pass_injeung : "+pass_injeung);
            
            System.out.println("마지막 : dice : "+dice);
            
            ModelAndView mv = new ModelAndView();
            
            mv.setViewName("/member/pass_change");
            
            mv.addObject("e_mail",e_mail);
            
            if (pass_injeung.equals(dice)) {
                
                //인증번호가 일치할 경우 인증번호가 맞다는 창을 출력하고 비밀번호 변경창으로 이동시킨다
            
                mv.setViewName("member/pass_change");
                
                mv.addObject("e_mail",e_mail);
                
                //만약 인증번호가 같다면 이메일을 비밀번호 변경 페이지로 넘기고, 활용할 수 있도록 한다.
                
                response_equals.setContentType("text/html; charset=UTF-8");
                PrintWriter out_equals = response_equals.getWriter();
                out_equals.println("<script>alert('인증번호가 일치하였습니다. 비밀번호 변경창으로 이동합니다.');</script>");
                out_equals.flush();
        
                return mv;
                
                
            }else if (pass_injeung != dice) {
                
                
                ModelAndView mv2 = new ModelAndView(); 
                
                mv2.setViewName("member/pass_email");
                
                response_equals.setContentType("text/html; charset=UTF-8");
                PrintWriter out_equals = response_equals.getWriter();
                out_equals.println("<script>alert('인증번호가 일치하지않습니다. 인증번호를 다시 입력해주세요.'); history.go(-1);</script>");
                out_equals.flush();
                
        
                return mv2;
                
            }    
        
            return mv;
            
        }
        
        
        
        //변경할 비밀번호를 입력한 후에 확인 버튼을 누르면 넘어오는 컨트롤러
        @RequestMapping(value = "pass_change.do{e_mail}", method = RequestMethod.POST)
        public ModelAndView pass_change(@PathVariable String e_mail, HttpServletRequest request, MemberDTO dto, HttpServletResponse pass) throws Exception{
                    
        String member_pass = request.getParameter("member_pass");
                    
        String e_mail1 = e_mail;
                    
        dto.setE_mail(e_mail1);
        dto.setMember_pass(member_pass);
        
        //값을 여러개 담아야 하므로 해쉬맵을 사용해서 값을 저장함
        
        Map<String, Object> map = new HashMap<>();
        
        map.put("e_mail", dto.getE_mail());
        map.put("member_pass", dto.getMember_pass());
        
        memberservice.pass_change(map,dto);
        
        ModelAndView mv = new ModelAndView();
        
        mv.setViewName("member/find_pass_result");
        
        return mv;
                    
        }
cs




MemberService.java 중 일부

1
2
3
4
@Override
    public void pass_change(Map<String, Object> map, MemberDTO dto) throws Exception {
        memberdao.pass_change(map,dto);
    }
cs




MemberDAOImpl.java 중 일부

1
2
3
4
5
6
7
8
@Override
    public void pass_change(Map<String, Object> map, MemberDTO dto)throws Exception{
        
        map.get("member_pass");
        map.get("e_mail");
 
        sqlSession.update("member.pass_change", map);
    }
cs



memberMapper.xml 중 일부

1
2
3
4
5
6
<!-- 비밀번호 변경 관련 mapper -->
    
    <update id = "pass_change" parameterType="hashMap">
    update member set member_pass=#{member_pass} where e_mail=#{e_mail}
 
    </update>
cs






: