Spring으로 이메일 인증하기
1. 구글 설정 (<--클릭으로 링크)
보안 수준이 낮은 앱 허용 사용 체크
2. MAVEN 추가 (Pom.xml) 라이브러리 업데이트
<!-- mail 인증을 위한 설정-->
<!-- mail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${org.springframework-version}</version>
</dependency>
3. ROOT-CONTEXT.XML 설정
<!-- 메일 보내기 (SEND) -->
<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="사용자이메일" />
<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>
4.MailHandler.java 생성
/*
* 메일 인증 서비스 사용하기
}
*
*
*
*
* */
public class MailHandler {
private JavaMailSender mailSender;
private MimeMessage message;
private MimeMessageHelper messageHelper;
public MailHandler(JavaMailSender mailSender) throws MessagingException {
this.mailSender = mailSender;
message = this.mailSender.createMimeMessage();
messageHelper = new MimeMessageHelper(message, true, "UTF-8");
}
public void setSubject(String subject) throws MessagingException {
messageHelper.setSubject(subject);
// 이메일 타이틀
}
public void setText(String htmlContent) throws MessagingException {
messageHelper.setText(htmlContent, true);
// 이메일 TEXT 부분
}
public void setFrom(String email, String name) throws UnsupportedEncodingException, MessagingException {
messageHelper.setFrom(email, name);
// 보내는 사람 이메일
}
public void setTo(String email) throws MessagingException {
messageHelper.setTo(email);
//받는 사람 이메일
}
public void addInline(String contentId, DataSource dataSource) throws MessagingException {
messageHelper.addInline(contentId, dataSource);
}
public void send() {
try {
mailSender.send(message);
}catch (Exception e) {
e.printStackTrace();
}
}
5.TempKey.java 생성성
(이메일 인증 키 생성을 위해서 사용될)
/*
*
* 인증키를 생성
*
*
*
*
* */
public class TempKey {
private boolean lowerCheck;
private int size;
public String getKey(int size, boolean lowerCheck) {
this.size = size;
this.lowerCheck = lowerCheck;
return init();
}
private String init() {
Random ran = new Random();
StringBuffer sb = new StringBuffer();
int num = 0;
do {
num = ran.nextInt(75)+48;
if((num>=48 && num<=57) || (num>=65 && num<=90) || (num>=97 && num<=122)) {
sb.append((char)num);
}else {
continue;
}
} while (sb.length() < size);
if(lowerCheck) {
return sb.toString().toLowerCase();
}
return sb.toString();
}
6.Controller 작성
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String RegisterPost(MemberVO user,Model model,RedirectAttributes rttr) throws Exception{
System.out.println("regesterPost 진입 ");
service.regist(user);
rttr.addFlashAttribute("msg" , "가입시 사용한 이메일로 인증해주세요");
return "redirect:/";
}
//이메일 인증 코드 검증
@RequestMapping(value = "/emailConfirm", method = RequestMethod.GET)
public String emailConfirm(MemberVO user,Model model,RedirectAttributes rttr) throws Exception {
System.out.println("cont get user"+user);
MemberVO vo = new MemberVO();
vo=service.userAuth(user);
if(vo == null) {
rttr.addFlashAttribute("msg" , "비정상적인 접근 입니다. 다시 인증해 주세요");
return "redirect:/";
}
//System.out.println("usercontroller vo =" +vo);
model.addAttribute("login",vo);
return "/user/emailConfirm";
}
(회원가입 등록시 userState 인증코드 생성 ) 회원인증을 통해서 로그인 가능 유무 활성화 제어)
7.UserDAO 생성
//회원 정보 입력
@Override
public void insertUser(MemberVO vo) throws Exception {
System.out.println("회원등록완료 !!!");
session.insert(namespace+".insertUser",vo);
System.out.println("//////////////////////////////////");
System.out.println("회원등록완료 !!!");
}
//email 중복 확인
@Override
public MemberVO authenticate(String str) throws Exception {
return session.selectOne(namespace+".checkdupl", str);
}
//해당 email에 인증 키 업데이트
@Override
public void createAuthKey(String memberEmail, String memberAuthKey) throws Exception {
MemberVO vo = new MemberVO();
vo.setMemberAuthKey(memberAuthKey);
vo.setMemberEmail(memberEmail);
session.update(namespace + ".createAuthKey", vo);
}
//이메일 인증 코드 확인
@Override
public MemberVO chkAuth(MemberVO vo) throws Exception {
return session.selectOne(namespace + ".chkAuth", vo);
}
//인증 후 계정 활성화
@Override
public void userAuth(MemberVO vo) throws Exception {
System.out.println("인증하나요??");
session.update(namespace + ".userAuth", vo);
System.out.println(vo.getUserState());
}
8.Service 생성
@Inject
private JavaMailSender mailSender;
@Override
public void regist(MemberVO vo) throws Exception {
System.out.println("서비스레지스");
String encPassword = passwordEncoder.encode(vo.getMemberPassword());
vo.setMemberPassword(encPassword);
//System.out.println("암호화된 비밀번호 : "+user.getUserPassword());
dao.insertUser(vo);
System.out.println(vo);
System.out.println("/////////////////////// 찍히");
String key = new TempKey().getKey(50,false); // 인증키 생성
dao.createAuthKey(vo.getMemberEmail(),key); //인증키 db 저장
//메일 전송
MailHandler sendMail = new MailHandler(mailSender);
sendMail.setSubject("FAINT 서비스 이메일 인증]");
sendMail.setText(
new StringBuffer().append("<h1>메일인증</h1>").append("<a href='http://localhost:8080/user
/emailConfirm?userEmail=").
append(vo.getMemberEmail()).
append("&memberAuthKey=").append(key).
append("' target='_blank'>이메일 인증 확인</a>").toString());
sendMail.setFrom("sososososo@gmail.com", "서어비스센터 ");
sendMail.setTo(vo.getMemberEmail());
sendMail.send();
}
//이메일 인증 키 검증
@Override
public MemberVO userAuth(MemberVO user) throws Exception {
MemberVO vo =new MemberVO();
System.out.println(user+"user");
vo=dao.chkAuth(user);
if(vo!=null){
try{
System.out.println(vo+"vo");
dao.userAuth(user);
dao.successAuth(vo);
}catch (Exception e) {
e.printStackTrace();
}}
return vo;
}
▼▼▼▼▼
회원가입 후 이메일을 확인하면
완료 !!!!!!
'프로그래밍 > SPRING' 카테고리의 다른 글
[SPRING] SPRING SECURITY 로그인 인증 (4) | 2018.04.17 |
---|---|
[SPRING] 스프링 시큐리티 (비밀번호 암호화) (1) | 2018.03.08 |
[Spring] 스프링 MVC 패턴 (0) | 2018.02.21 |
[Spring] 스프링 네이버 로그인 API 연동 (2) | 2018.02.07 |
Spring Anntation (0) | 2018.01.30 |