Spring
[스프링]이메일 보내기(2-이메일 인증)
김판다
2021. 11. 16. 23:31
지난 글에서 이어집니다
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를 넣은건 후에 이메일로 넘어온 번호와 서버측에서 갖고있던 정보들이 맞는지 확인하기 위해서다.
>컨트롤러에 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으로 보낸다.