티스토리 뷰





반응형

개요

비밀번호 찾기 파트를 맡은 사람들은 고민이 많을 것이다. 그냥 대충 하자니 없어 보이고 빡세게 인증을 넣어서 변경하고 싶은데 어려울것 같고.. 그런 사람들을 위해 간단하게 이메일로 인증 번호 보내고 이를 서블릿에서 확인하여 변경하는 코드를 포스팅하려고 한다. 필자도 꼬박 하루 고생했던것 같다. 여러가지 방법이 있긴 하지만 아직 배우지 않은 spring의 용어가 나와 쫄았다. 그래서 이리저리 블로그들 뒤지고 뒤져서 겨우 찾아냈다. 자 그럼 이제 시작해보자!!


1. 라이브러리 추가

이메일 관련 라이브러리가 좀 많이 필요한데 하도 비슷한 내용들을 서치해서 정리가 안된다 사진으로 빨간 네모친 것들을 일단 다 때려박자 파일은 나도 어디서 받았는지 기억이 안나므로 첨부파일로 올려드리겠다.

javamail1_4_7.zip

javax.mail-api-1.4.7.jar.zip


2. Naver smtp 설정 하기

우리는 네이버의 smtp를 이용할 것이라 네이버 로그인을 해서 설정을 해줘야할게 있다. 자신의 이메일으로 들어가면 환경설정이 있는데 거기에 들어가면 pop3/imap설정이 있으니 클릭하면 아마 사용중이지 않다고 나올테니 사용한다고 바꿔준다. 그러면 하단에 몇개의 정보가 생기는데 그중 smtp 포트, 서버이름, 아이디, 패스워드를 잘 기억하면 된다.

 

 



3.코드 작성하기

자 이제 사전 준비는 끝났고 코드를 구현해 볼 차례인데 간략히 어찌 코드를 짤 것인지 설명을 하자면.. 제일 먼저 아이디와 이메일을 입력받고 아이디와 이메일이 있으면 등록된 이메일로 난수를 보내서 인증하도록 할 예정이다. 일단 있는 회원인지 확인부터하고 있다면 서버 정보를 properties로 넣어주고 인증번호를 만들기 위해 StringBuffer로 추가한 뒤 toString해서 데이터 전송시 편하게 바꿨다. 이후 아래는 코드 주석을 천천히 읽어보면 되고 끝부분에 인증키를 세션값에 넣는 이유는 request로는 보관이 용이하지않기 때문에 세션에 넣고 다음 서블릿에서 불러와 사용자가 입력한 인증값과 비교하기위해 사용했다.

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
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String memberId = request.getParameter("memberId");
        String email = request.getParameter("email");
        
        //먼저 아이디로 회원정보를 받아오고 가져온 데이터에서 email값을 비교하여 존재하지 않으면 인증메일 보내지 못함
        Member m = new MemberService().memberLogin(memberId);
        if(m==null || !m.getEmail().equals(email))
        {
            request.setAttribute("msg""아이디나 이메일 정보가 맞지 않습니다");
            request.setAttribute("loc""/member/searchPw");
            request.getRequestDispatcher("/views/common/msg.jsp").forward(request, response);
            return;
        }
        
                //mail server 설정
                String host = "smtp.naver.com";
                String user = ""//자신의 네이버 계정
                String password = "";//자신의 네이버 패스워드
                
                //메일 받을 주소
                String to_email = m.getEmail();
                
                //SMTP 서버 정보를 설정한다.
                Properties props = new Properties();
                props.put("mail.smtp.host", host);
                props.put("mail.smtp.port"465);
                props.put("mail.smtp.auth""true");
                props.put("mail.smtp.ssl.enable""true");
                
                //인증 번호 생성기
                StringBuffer temp =new StringBuffer();
                Random rnd = new Random();
                for(int i=0;i<10;i++)
                {
                    int rIndex = rnd.nextInt(3);
                    switch (rIndex) {
                    case 0:
                        // a-z
                        temp.append((char) ((int) (rnd.nextInt(26)) + 97));
                        break;
                    case 1:
                        // A-Z
                        temp.append((char) ((int) (rnd.nextInt(26)) + 65));
                        break;
                    case 2:
                        // 0-9
                        temp.append((rnd.nextInt(10)));
                        break;
                    }
                }
                String AuthenticationKey = temp.toString();
                System.out.println(AuthenticationKey);
                
                Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(user,password);
                    }
                });
                
                //email 전송
                try {
                    MimeMessage msg = new MimeMessage(session);
                    msg.setFrom(new InternetAddress(user, "KH Books"));
                    msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to_email));
                    
                    //메일 제목
                    msg.setSubject("안녕하세요 KH BOOKS 인증 메일입니다.");
                    //메일 내용
                    msg.setText("인증 번호는 :"+temp);
                    
                    Transport.send(msg);
                    System.out.println("이메일 전송");
                    
                }catch (Exception e) {
                    e.printStackTrace();// TODO: handle exception
                }
                HttpSession saveKey = request.getSession();
                saveKey.setAttribute("AuthenticationKey", AuthenticationKey);
                //패스워드 바꿀때 뭘 바꿀지 조건에 들어가는 id
                request.setAttribute("id", memberId);
                request.getRequestDispatcher("/views/login_myPage/searchPasswordEnd.jsp").forward(request, response);
    }
cs


4. 이메일 확인하기

이런식으로 그럴듯한 인증값이 나온다. 이제 인증값을 넣고 바꿀 패스워드를 입력해보자.

5. 인증값 비교하기

이제 아래와 같이 인증키와 아까 넣어둔 세션의 값을 비교해서 맞지않으면 다른곳으로 보내고 맞으면 아래에 원하는 로직을 더 작성하면 된다. 끝~! 정말 간단하쥬?? 


1
2
3
4
5
6
7
8
9
10
11
12
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String AuthenticationKey = (String)request.getSession().getAttribute("AuthenticationKey");
        String AuthenticationUser = request.getParameter("AuthenticationUser");
        if(!AuthenticationKey.equals(AuthenticationUser))
        {
            System.out.println("인증번호 일치하지 않음");
            request.setAttribute("msg""인증번호가 일치하지 않습니다");
            request.setAttribute("loc""/member/searchPw");
            request.getRequestDispatcher("/views/common/msg.jsp").forward(request, response);
            return;
        }
cs




해당 게시글이 도움이 되셨다면 광고 클릭한번 부탁드립니다 ㅎㅎ

반응형
댓글
반응형
최근에 달린 댓글
글 보관함
Total
Today
Yesterday
최근에 올라온 글
«   2024/04   »
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