티스토리 뷰

지난 글에서 이어집니다

https://rla5378.tistory.com/49

 

[스프링]이메일 보내기 (1)

1.pom.xml추가하기 org.springframework spring-context-support ${org.springframework-version} javax.mail javax.mail-api 1.5.4 com.sun.mail javax.mail 1.5.3 2. 이메일 보낼 계정 [Google계정관리] > 좌측..

rla5378.tistory.com

 

1.컨트롤러

MailController.java

@Controller
public class MailController {
	@Autowired
	MailService ms;

	@GetMapping("auth_form")
	public String autoForm() {
		return "auth";
	}

	@GetMapping("auth")
	public String auth(HttpServletRequest request) {
		ms.auth(request);
		return "redirect:https://www.google.co.kr/";
	}
    @GetMapping("auth_check")
	public String authCheck(@RequestParam String userid,@RequestParam String userkey,
							HttpSession session) {
		String sessionKey = (String) session.getAttribute(userid);
		if(sessionKey != null) {
			if(sessionKey.equals(userkey)) {
				session.setAttribute("userid", userid);
			}
		}
		return"redirect:auth_form";
	}
}

인증보내기가 끝나면 구글주소로 향하게 되어있다.

 

2.서비스

MailService.java

@Service
public class MailService {
	@Autowired
	JavaMailSender mailsender;
    
//로그인 인증
	public void auth(HttpServletRequest request) {
		HttpSession session = request.getSession();
		String userid = "abc";
		String userkey = rand();
		session.setAttribute(userid, userkey);
		//서버에서 세션을 만들어 대기중
		//abc라는 세션 명에 userkey가 들어있는 상황
		
		String body = "<h2>안녕하세요 ㅇㅇㅇ입니다</h2><hr>" + "<h3>" + userid 
				+ " 님</h3>" + "<p>인증하기 버튼을 누르면 로그인 됩니다</p>"
				+ "<a href='http://localhost:8081(자기톰켓포트번호)" + request.getContextPath()
				+ "/auth_check?userid=" + userid
				+ "&userkey=" + userkey + "'>인증하기</a>";
		sendMail("/*받는사람 이메일*/", "이메일 인증입니다", body);
	}
//인증번호
	private String rand() {
		Random ran = new Random();
		String str = "";
		int num;
		while (str.length() != 20) {
			num = ran.nextInt(75) + 48;
			if ((num >= 48 && num <= 57) || (num >= 65 && num <= 90) || (num >= 97 && num <= 122)) {
				str += (char) num;
			} else {
				continue;
			}
		}
		return str;
	}
}

인증번호는 숫자,대소문자를 섞은 20문자이다.

session에 userid,userkey를 넣은건 후에 이메일로 넘어온 번호와 서버측에서 갖고있던 정보들이 맞는지 확인하기 위해서다.

 

보내진 메일
인증하기 a태그를 클릭할 시 서버에 보내지는 값

>컨트롤러에 auth_check()

@GetMapping("auth_check")
	public String authCheck(@RequestParam String userid,@RequestParam String userkey,
							HttpSession session) {
		String sessionKey = (String) session.getAttribute(userid);
		if(sessionKey != null) {
			if(sessionKey.equals(userkey)) {
				session.setAttribute("userid", userid);
			}
		}
		return"redirect:auth_form";
	}

인증하기로 보내진 값과 서버에 있는 값을 비교해보고 다시 auth_form으로 보낸다.

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
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
글 보관함