팀프로젝트/SpringBoot

스프링 부트 팀플) 20240310_이메일 인증 구현

일일일코_장민기 2024. 3. 10. 10:08
728x90

 

 

우선 컨트롤러에 다 때려박았던 코드를 서비스로 분산했다.

컨트롤러는 쓸 것만 냅둬야지

 

이메일 인증 시스템을 위해서는 크게 6가지 작업이 필요하다.

 

                                       1. 6자리 랜덤 정수를 만드는 함수
                                       2. 그 6자리 정수를 3분만 유효한 쿠키 만들기
                                       3. 회원가입 페이지에 다시 들어오면 2번에서 만든 쿠키를 Reset하는 함수
                                       4. 1번에서 만든 함수를 이메일로 보내는 양식 만들기
                                       5. 사용자가 이메일로 받은 인증번호를 입력하면 쿠키와 비교해서 결과값을 출력하는 Ajax 만들기

                                       6. 만든 내용을 jsp와 연동하기

 


    // 임의의 6자리 양수를 반환
 	public String makeRandomNumber() {
 		Random r = new Random();
 		String randomNumber = "";
 		for (int i = 0; i < 6; i++) {
 			randomNumber += Integer.toString(r.nextInt(10));
 		}
 		ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
 		HttpServletResponse response = attributes.getResponse();

 		Cookie c= new Cookie("confirmNum", randomNumber);	// 인증번호 값을 쿠키로 생성
 		
 		c.setMaxAge(60*3);	// 인증번호 유호시간 3분
 		
 		response.addCookie(c);
 		
 		 long expirationTimeMillis = System.currentTimeMillis() + (c.getMaxAge() * 1000);	//쿠키 만료 시간 확인
 		 Date expirationDate = new Date(expirationTimeMillis);
 		 
 		// SimpleDateFormat을 사용하여 연월일시분초로 변환
 		    SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분 ss초");
 		    expireDate = sdf.format(expirationDate);
 		
 		    System.out.println("쿠키의 만료 시간: " + expireDate);
 		
 		return randomNumber;
 
    
 	//쿠키 삭제
	@RequestMapping(value="/deleteCookiee", method=RequestMethod.GET)
	public String deleteCookiee(HttpServletResponse response){
		
		Cookie c = new Cookie("confirmNum", null); // 인증번호 값을 무작위 숫자로 지정
	
		c.setMaxAge(0); // 유효시간을 0으로 설정
	
		response.addCookie(c); // 응답 헤더에 추가해서 없어지도록 함
		
	return "complete";

	}
 		
	//인증번호 확인 AJAX
	@RequestMapping(value =  "/CertificationAnswer", method = RequestMethod.POST)
	public String CertificationAnswer(String certification, HttpServletRequest request) {
		Cookie[] cookies= request.getCookies();
		String confirmNumValue = "";
		String mesg = "";
		if (cookies != null) {
	        for (Cookie cookie : cookies) {
	            if ("confirmNum".equals(cookie.getName())) {
	                confirmNumValue = cookie.getValue();
	                break; 
	            }
	        }
	    }
		if(confirmNumValue.equals(certification.trim())) {
			mesg = "confirm";
		} else {
			mesg = "notConfirm";
		}
		return mesg;
	}

 

 

그런데 6번을 하던 중 문제가 생겼다.

 

 

 

어라? 왜 경로를 못 찾지? 하면서 골머리 싸매다
바보짓 했다는 것을 깨달았다.

 

 

자세히 읽어보니 이 친구...complete.jsp로 가려고 한다...

 

그렇다...컨트롤러를 @RestController로 하지 않고 있었던 것...
그 김에 함수들 return도 쭉 확인해봤다. 몇 군데 틀린 곳 발견;;

 

 

수정하니 에러는 사라지고 Ajax는 깔끔하게 출력된다.

 

성공!

 

 

이제 주말의 마지막 작업, 암호화/복호화 전면 적용과 확인 작업이 남았다.

금방 끝나겠지?