본문 바로가기

프로그래밍/Spring

spring 비밀번호 찾기

사용환경 및 언어: 이클립스, sts, spring4, oracle11




1. pom.xml에 dependency 추가

<!-- https://mvnrepository.com/artifact/javax.mail/mail -->

<dependency>

    <groupId>javax.mail</groupId>

    <artifactId>mail</artifactId>

    <version>1.4.7</version>

</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-context-support</artifactId>

    <version>4.1.7.RELEASE</version>

</dependency>


2. root-context 에 빈 등록, 하기 전에 먼저 mail과 mailsender 먼저 만들어야 에러가 나지 않는다. 4번 먼저 !!

<!-- 메일 보내기  -->

  <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">

      <property name="host" value="smtp.gmail.com" />

      <property name="port" value="587" />

      <property name="defaultEncoding" value="utf-8"/>

      <property name="username" value="보내는 이메일주소" />

      <property name="password" value="비밀번호" />

   

      <!-- email 요청시는 SMTP -->

      <property name="javaMailProperties">

        <props>

            <prop key="mail.transport.protocol">smtp</prop>

            <prop key="mail.smtp.auth">true</prop>

            <prop key="mail.smtp.starttls.enable">true</prop>

            <prop key="mail.debug">true</prop>

        </props>

      </property>

  </bean>

  </bean>

<bean id="email" class="패키지 주소 .Email">

</bean>

<bean id="emailSender" class="패키지 주소.EmailSender">

</bean>


3.비밀번호 찾기의 대략적인 프로세스는 이메일과 비밀번호 질문, 힌트를 입력 받은 다음 컨트롤러에서 임시 비밀번호 생성-> 이메일, 비밀번호질문, 힌트가 맞다면 mapper 에서 임시 비밀번호로 재설정->session에 값 저장->이메일 전달


4.  mail과 mailsender 만들어준다. 2번 하기 전에 해야한다.

public class Email {


private String subject;

    private String content;

    private String receiver;

     

    public String getReceiver() {

        return receiver;

    }

    public void setReceiver(String receiver) {

        this.receiver = receiver;

    }

 

    public String getSubject() {

        return subject;

    }

    public void setSubject(String subject) {

        this.subject = subject;

    }

    public String getContent() {

        return content;

    }

    public void setContent(String content) {

        this.content = content;

    }

}


public class EmailSender {


@Autowired

     protected JavaMailSender  mailSender;

 

     public void SendEmail(Email email) throws Exception {

          

         MimeMessage msg = mailSender.createMimeMessage();

         System.out.println("****메일센더 ??");

         try {

             msg.setSubject(email.getSubject());

             msg.setText(email.getContent());

             msg.setRecipients(MimeMessage.RecipientType.TO , InternetAddress.parse(email.getReceiver()));

            

         }catch(MessagingException e) {

             System.out.println("MessagingException");

             e.printStackTrace();

         }

         try {

             mailSender.send(msg);

         }catch(MailException e) {

             System.out.println("MailException발생");

             e.printStackTrace();

         }

     }

}



5. Controller


위에는 새로운 비밀번호를 만들어 주는 컨트롤러이고 밑에는 이메일을 전송해주는 컨트롤러이다.

@Autowired

private EmailSender emailSender;


@Autowired

private Email email;


// 새로운 비밀번호가 생성된다.

@RequestMapping("/newPassword")

public String newPassword(@Valid MemberVO memberVO, HttpSession session) throws Exception {

Random r = new Random();

int num = r.nextInt(89999) + 10000;

String npassword = "bapsi" + Integer.toString(num);// 새로운 비밀번호 변경

memberVO.setPassword(npassword);

session.setAttribute("memberVO", memberVO);

memberService.newPassword(memberVO);

return "/findPassword";

}


// 이메일로 비밀번호가 전송이된다.

@RequestMapping("/findPassword")

public String findPasswordOK(MemberVO memberVO, HttpSession session) throws Exception {

memberVO = (MemberVO) session.getAttribute("memberVO")

email.setContent("새로운 비밀번호 " + memberVO.getPassword() + " 입니다. );

email.setReceiver(memberVO.getEmail());

email.setSubject("안녕하세요"+memberVO.getEmail() +"님  재설정된 비밀번호를 확인해주세요");

emailSender.SendEmail(email);

System.out.println(email);

session.invalidate();

return "login";



6. 서비스, DAO 만들어준다.


1)Service

public void newPassword(MemberVO memberVO) throws Exception;

2)ServiceImpl

@Override

public void newPassword(MemberVO memebrVO) throws Exception {


memberDAO.newPassword(memebrVO);

}

3)DAO는 Service와 같다.

public void newPassword(MemberVO memberVO) throws Exception;

4)DAOImpl

@Override

public void newPassword(MemberVO member) {

String password = member.getPassword();

member.setPassword(password);

sqlSession.update("newPassword", member);

}



7.mapper에서 정보가 맞으면 비밀번호를 변경하는 내용을 만들어준다.

<update id="newPassword" parameterType="MemberVO">

update ruser_t

set password = #{password}

where email=#{email} and hintq=#{hintq} and hinta=#{hinta}

</update>





개발을 시작하는 초보자 입니다. 혹시 더 좋은 코드나 개선 할 점이 있다면 언제든지 댓글 남겨주세요 !!