이메일 인증 API

채상혁·2022년 2월 17일
0

Spring

목록 보기
15/18

1.https://mvnrepository.com/ 에서 메일을 보내기위한 의존성 라이브러리 추가.

2. 이메일 인증 관련 빈등록을 위한 email-config.xml파일 추가.

	<context:property-placeholder location="classpath:/db-config/email.properties"/>

	<!-- 이메일 인증 관련 빈 등록 -->
	<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
		<property name="host" value="smtp.gmail.com"/>
		<property name="port" value="587"/>
		<property name="username" value="${email.account}"/>
		<property name="password" value="${email.password}"/>
		
		<property name="javaMailProperties">
			<props>
                <prop key="mail.transport.protocol">smtp</prop>
                <prop key="mail.smtp.auth">true</prop>
                <!-- gmail의 경우 보안문제 업데이트로 인해 SSLSocketFactory를 추가해야 smtp 사용 가능. -->
                <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
                <prop key="mail.smtp.starttls.enable">true</prop>
                <prop key="mail.debug">true</prop>
                <prop key="mail.smtp.ssl.trust">smtp.gmail.com</prop>
				<prop key="mail.smtp.ssl.protocols">TLSv1.2</prop>
            </props>
		</property>
	</bean>

민감한 정보를 담고있는 계정 정보는 .properties 파일을 생성한다.

email.account = abc1234@gmail.com
email.password = aaaa1111!!

web.xml에서 DispatherServlet이 실행될때 email-config.xml도 추가.

controller에서 이메일 인증 관련 로직을 실행하면 비대해지므로 service,component 로 따로 만들어준다

ex: MailSendService

package com.spring.myweb.controller;

import javax.servlet.http.HttpSession;

import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.spring.myweb.command.UserVO;
import com.spring.myweb.user.service.IUserService;
import com.spring.myweb.util.MailSendService;

@Controller
@RequestMapping("/user")
public class UserController {

	@Autowired
	private IUserService service;
	@Autowired
	private MailSendService mailService;
	
	//주소 api 신청키
//	devU01TX0FVVEgyMDIyMDIxNjExMzAxNjExMjI1MTE=
	
	
	//회원가입 페이지 이동
	//userJoin 창 띄우기
	@GetMapping("/userJoin")
	public void userJoin() {}
	
	
	//아이디 중복 체크(비동기)
	@PostMapping("/idCheck")
	@ResponseBody //Rest Controller가 아닌 경웅에는 아노테이션을 붙여야 비동기 통신이 가능하다
	public String idCheck(@RequestBody String userId) {
		
		int result = service.idCheck(userId);
		if(result == 1) {
			return "duplicated";
		} else return "Success";
	}
	
	//이메일 인증
	@GetMapping("/mailCheck")
	@ResponseBody
	public String mailCheck(String email) {
		System.out.println("이메일 인증 요청이 들어옴");
		System.out.println("인증 이메일: " + email);
		return mailService.joinEmail(email);

	
	}
	
	//회원 가입 처리
	@PostMapping("/join")
	public String join(UserVO vo,RedirectAttributes ra) {
		System.out.println("params:" + vo);
		// 요청하는 jsp 파일안에 파라미터 변수명 name을 지어주지 않아서 error가 터짐;
		//userId - > null이라서 (pk) 터짐.
		service.join(vo);
		ra.addFlashAttribute("msg","JoinSuccess");
		return "redirect:/user/userLogin";
		
	}
	
	//로그인 페이지 이동 요청
	@GetMapping("/userLogin")
	public void userLogin() {}

	
	//로그인 요청
	@PostMapping("/login")
	public String login(String userId, String userPw, Model model) {
		UserVO vo =	service.login(userId, userPw);
		model.addAttribute("user",vo);
		return "/user/userLogin";
		
	}
	
	@GetMapping("/userMyPage")
	public void userMyPage(HttpSession session, Model model) {
		//현재 로그인중인 사람만 요청이 가능하므로 session달라고한다
		
		//세션 데이터에서 id를 뽑아야 sql문을 돌릴 수 있겟죠?
		String id = ((UserVO)session.getAttribute("login")).getUserId();
		
		UserVO userInfo = service.getInfo(id);
		
		model.addAttribute("userInfo",userInfo);
	}
	
	@PostMapping("/userUpdate")
	public String update(UserVO vo,RedirectAttributes ra) {
		System.out.println("param: " +vo);
		service.updateUser(vo);
		
		ra.addFlashAttribute("msg","수정이 완료되었습니다");
		return "redirect:/";
	}
}
//비동기와 동기를 적절히 섞어가면서 통신한다.

메일인증 폼에서 실제로 수신되는지 확인한다.

0개의 댓글