diff --git a/src/main/java/nlib/user/web/MemberController.java b/src/main/java/nlib/user/web/MemberController.java index 2d1a05d8..6fd1e668 100644 --- a/src/main/java/nlib/user/web/MemberController.java +++ b/src/main/java/nlib/user/web/MemberController.java @@ -2,7 +2,6 @@ package nlib.user.web; import java.io.IOException; -import java.net.URI; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Files; @@ -10,12 +9,10 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Random; import javax.annotation.Resource; import javax.inject.Inject; @@ -23,41 +20,17 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; -import org.apache.commons.lang.StringUtils; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; -import org.springframework.web.servlet.support.RequestContextUtils; -import org.springframework.web.util.UriComponentsBuilder; -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.github.scribejava.core.model.OAuth2AccessToken; - -import egovframework.com.ext.oauth.service.OAuthConfig; import egovframework.com.ext.oauth.service.OAuthLogin; import egovframework.com.ext.oauth.service.OAuthUniversalUser; import egovframework.com.ext.oauth.service.OAuthVO; @@ -66,20 +39,17 @@ import nlib.cmm.NlibCommonController; import nlib.cmm.crypto.AriaCrypto; import nlib.cmm.service.NlibProperty; import nlib.cmm.session.SessionConfig; -import nlib.cmm.snslogin.GoogleOAuthResponse; -import nlib.cmm.snslogin.KakaoController; import nlib.info.service.InformService; import nlib.mail.EmailSender; import nlib.mail.service.EmailVO; -import nlib.restful.service.DataApiReqVO; import nlib.user.service.LoginService; import nlib.user.service.MemberService; import nlib.user.service.NlibLoginVO; import nlib.user.service.UserInfoService; import nlib.util.StringUtil; -import org.springframework.mail.javamail.JavaMailSender; -import org.springframework.security.core.Authentication; +import nlib.util.EmailUtil; + /** *
@@ -138,8 +108,8 @@ public class MemberController extends NlibCommonController{
 	@Resource(name = "ariaCrypto")
 	private AriaCrypto ariaCrypto;
 	
-	@Autowired
-    private EmailSender emailSender;
+	@Resource(name = "emailUtil")
+	private EmailUtil emailUtil;
 	
 	/* 이메일 메시지 및 템플릿 정보 */
 	//템플릿 파일경로
@@ -161,6 +131,8 @@ public class MemberController extends NlibCommonController{
 	@Value("#{properties['guest.userid']}")
 	private String gUserId;
 	
+	@Autowired
+    private EmailSender emailSender;
 	
 	public ModelMap certificateMember(HttpServletRequest req)  {
 		return null;
@@ -295,8 +267,8 @@ public class MemberController extends NlibCommonController{
 		//사용자ID 마스킹처리
 		for(int i=0;voList.size()>i;i++)
 		{
-			voList.get(i).setEmail(maskingEmail(ariaCrypto.decode(voList.get(i).getEmail())));
-			voList.get(i).setName(maskingName(voList.get(i).getName()));
+			voList.get(i).setEmail(StringUtil.maskEmail(ariaCrypto.decode(voList.get(i).getEmail())));
+			voList.get(i).setName(StringUtil.maskName(voList.get(i).getName()));
 		}
 		
 		model.addAttribute("cnt",voList.size());
@@ -367,8 +339,8 @@ public class MemberController extends NlibCommonController{
 		loginVO.setJoinCouncilCd(getCurCouncilCd(request));
 		
 		loginVO = loginService.selectLoginUserInfo(loginVO);
-		loginVO.setEmail(maskingEmail(loginVO.getEmail()));
-		loginVO.setName(maskingName(loginVO.getName()));
+		loginVO.setEmail(StringUtil.maskEmail(loginVO.getEmail()));
+		loginVO.setName(StringUtil.maskName(loginVO.getName()));
 		
 		model.addAttribute("result",loginVO);
 		return "/nlib/member/accountConsolidationForm";
@@ -427,31 +399,10 @@ public class MemberController extends NlibCommonController{
 		
     	// 결과가 정상이면, 안내 메일 발송 
     	// > 템플릿파일에서 내용 mailing.sender.membership.template
-    	// > 치환 (사용자명, 이메일주소)
     	// > 발송처리 요청 
-		String reciver = vo.getLoginUserId(); //받을사람의 이메일입니다.-> naver nate 등등 
-        String subject = "온라인자료대출시스템 회원가입을 축하드립니다.";
-        
-    	Path path = Paths.get(template);
-    	Charset cs = StandardCharsets.UTF_8;
-    	List list = new ArrayList();
-    	String contents = "";
-    	try {
-    		list = Files.readAllLines(path,cs);
-    	}catch(IOException e) {
-    		e.printStackTrace();
-    	}
-    	
-    	for(String readLine : list) {
-    		contents+=readLine;
-    	}
-    	contents=contents.replace("${userName}",vo.getName());
-    	
-    	email.setReciver(reciver);
-        
-        email.setSubject(subject);
-        email.setContent(contents);
-        emailSender.SendEmail(email);
+		Map replaceContents = new HashMap();
+		replaceContents.put("${contents}", vo.getName());
+		emailUtil.sendEmail(vo.getLoginUserId(),"온라인자료대출시스템 회원가입을 축하드립니다.",replaceContents,template);
         
 		return "nlib/member/insertMemberInfoResult";
 	}
@@ -519,31 +470,11 @@ public class MemberController extends NlibCommonController{
 		//이메일 발송
 		// 결과가 정상이면, 안내 메일 발송 
     	// > 템플릿파일에서 내용 mailing.sender.membership.template
-    	// > 치환 (사용자명, 이메일주소)
     	// > 발송처리 요청 
-		String reciver = email; //받을사람의 이메일입니다.-> naver nate 등등 
-        String subject = "온라인자료대출시스템 이메일 인증번호";
-        
-    	Path path = Paths.get(template);
-    	Charset cs = StandardCharsets.UTF_8;
-    	List list = new ArrayList();
-    	String contents = "";
-    	try {
-    		list = Files.readAllLines(path,cs);
-    	}catch(IOException e) {
-    		e.printStackTrace();
-    	}
+		Map replaceContents = new HashMap();
+		replaceContents.put("${contents}", "인증번호는"+CertNumber+"입니다.");
+    	emailUtil.sendEmail(email,"온라인자료대출시스템 이메일 인증번호",replaceContents,template);
     	
-    	for(String readLine : list) {
-    		contents+=readLine;
-    	}
-    	contents=contents.replace("${userName}","인증번호는"+CertNumber+"입니다.");
-    	
-    	emailVO.setReciver(reciver);
-        
-    	emailVO.setSubject(subject);
-    	emailVO.setContent(contents);
-    	emailSender.SendEmail(emailVO);
     	map.put("msg","이메일 인증번호가 발송됐습니다.");
     	map.put("emailCertYn","Y");
 		return map;
@@ -704,8 +635,8 @@ public class MemberController extends NlibCommonController{
 		
 		loginVO = loginService.selectLoginUserInfo(loginVO);
 		//이메일,이름 마스킹
-		loginVO.setEmail(maskingEmail(loginVO.getEmail()));
-		loginVO.setName(maskingName(loginVO.getName()));
+		loginVO.setEmail(StringUtil.maskEmail(loginVO.getEmail()));
+		loginVO.setName(StringUtil.maskName(loginVO.getName()));
 		model.addAttribute("loginVO",loginVO);
 		return "nlib/member/deleteMembershipForm";
 	}
@@ -778,45 +709,14 @@ public class MemberController extends NlibCommonController{
 		
 		if(loginVO!=null)
 		{
-			String reciver = vo.getEmail(); //받을사람의 이메일입니다.-> naver nate 등등 
-	        String subject = "온라인자료대출시스템 비밀번호 초기화 메일입니다.";
-	        
-	        
 	    	// 결과가 정상이면, 안내 메일 발송 
 	    	// > 템플릿파일에서 내용 mailing.sender.membership.pwdtemplate
-	    	// > 치환 (사용자명, 이메일주소)
 	    	// > 발송처리 요청 
-	    	Path path = Paths.get(pwdTemplate);
-	    	Charset cs = StandardCharsets.UTF_8;
-	    	List list = new ArrayList();
-	    	String contents = "";
-	    	try {
-	    		list = Files.readAllLines(path,cs);
-	    	}catch(IOException e) {
-	    		e.printStackTrace();
-	    	}
-	    	
-	    	for(String readLine : list) {
-	    		contents+=readLine;
-	    	}
-	    	
-	    	encodedText = egovPasswordEncoder.encryptPassword(loginVO.getLoginUserId()+InitPwd);
-			vo.setPassword(encodedText);
-				
-			vo.setMbInfoId(gUserId);
-			vo.encodePrivateInfo();
-			//암호화된 비밀번호로 수정
-			memberService.changePassword(vo);
-				
-	    	contents=contents.replace("${userPwd}",InitPwd);
 			
-	        email.setReciver(reciver);
-	        
-	        email.setSubject(subject);
-	        email.setContent(contents);
-	        emailSender.SendEmail(email);
-	        
-	       
+			Map replaceContents = new HashMap();
+			replaceContents.put("${contents}", InitPwd);
+	    	emailUtil.sendEmail(vo.getEmail(),"온라인자료대출시스템 비밀번호 초기화 메일입니다.",replaceContents,pwdTemplate);
+	    	
 			
 	        message="초기화된 비밀번호가 이메일로 발송됐습니다.";
 		}else {
@@ -857,51 +757,6 @@ public class MemberController extends NlibCommonController{
 		return message;
 	}
 	
-	/** * 이메일 masking 후 리턴
* 변환 실패시 입력값 그대로 리턴
* 이메일 아이디 앞 2자리 노출
*/ - public String maskingEmail(String email){ - try{ - if(StringUtils.isEmpty(email) || !email.contains("@")){ - return email; - } - String[] emailSplited = email.split("@"); - if(emailSplited.length != 2){ - return email; - } - if(emailSplited[0].length() > 2){ - String str=""; - for(int i=2;emailSplited[0].length()>i;i++) - { - str+="*"; - } - return email.substring(0, 2) + str+"@" + emailSplited[1]; - } - else{ - return email; - } - } - catch (Exception e){ - } return email; - } - /** * 이름 masking 후 리턴
* 변환 실패시 입력값 그대로 리턴
*/ - public String maskingName(String name){ - try{ - if(StringUtils.isEmpty(name)){ - return name; - } - if(name.length() == 2){ - - return name.substring(0, 1)+"*"; - } - else if(name.length() >2){ - String str=""; - for(int i = 2; name.length()>i;i++) - str+="*"; - return name.substring(0, 1)+str+name.substring(name.length()-1,name.length()); - } - } - catch (Exception e){ - } return name; - } /** * 회원가입 SNS 구글인증 * @exception Exception diff --git a/src/main/java/nlib/util/EmailUtil.java b/src/main/java/nlib/util/EmailUtil.java new file mode 100644 index 00000000..84c04b0e --- /dev/null +++ b/src/main/java/nlib/util/EmailUtil.java @@ -0,0 +1,90 @@ +package nlib.util; + +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import egovframework.com.cmm.EgovWebUtil; +import egovframework.com.utl.fcc.service.EgovStringUtil; +import nlib.mail.EmailSender; +import nlib.mail.service.EmailVO; + +/** + *
+ * @Class Name : EmailUtil.java
+ * 
+ * @Description : 이메일 관련 유틸리티 기능 모음 클래스 
+ * 
+ * 
+ * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
+ *
+ * 
+ * + * @ ------------ -------- --------------------------- + * @ 수정일 수정자 수정내용 + * @ ------------ -------- --------------------------- + * @ 2021. 9. 16. JSYOo 최초 생성 + * + * + * @author 이씨플라자 * DIGITALSHIP JSYOO + * @since 2021. 9. 16. + * @version 1.0 + * + */ +@Component("emailUtil") +public class EmailUtil{ + + @Autowired + private EmailSender emailSender; + + + /** 메일발송 + * @param reciverEmail + * @param subject + * @param replaceContents + * @param templateFilePath + * @throws Exception + */ + public void sendEmail(String reciverEmail, String subject, Map replaceContents, String templateFilePath) throws Exception { + EmailVO email = new EmailVO(); + + Path path = Paths.get(templateFilePath); + Charset cs = StandardCharsets.UTF_8; + List list = new ArrayList(); + String contents = ""; + try { + list = Files.readAllLines(path,cs); + }catch(IOException e) { + e.printStackTrace(); + } + + for(String readLine : list) { + contents+=readLine; + } + Set set = replaceContents.keySet(); + + Iterator iterator = set.iterator(); + + while(iterator.hasNext()){ + String key = (String)iterator.next(); + contents=contents.replace(key,(CharSequence) replaceContents.get(key)); + } + email.setReciver(reciverEmail); + + email.setSubject(subject); + email.setContent(contents); + emailSender.SendEmail(email); + } +} diff --git a/src/main/java/nlib/util/StringUtil.java b/src/main/java/nlib/util/StringUtil.java index a8a921e1..4a3ca6b6 100644 --- a/src/main/java/nlib/util/StringUtil.java +++ b/src/main/java/nlib/util/StringUtil.java @@ -191,4 +191,51 @@ public class StringUtil extends StringUtils { return str; } + + /** * 이메일 masking 후 리턴
* 변환 실패시 입력값 그대로 리턴
* 이메일 아이디 앞 2자리 노출
*/ + public static String maskEmail(String email){ + try{ + if(StringUtils.isEmpty(email) || !email.contains("@")){ + return email; + } + String[] emailSplited = email.split("@"); + if(emailSplited.length != 2){ + return email; + } + if(emailSplited[0].length() > 2){ + String str=""; + for(int i=2;emailSplited[0].length()>i;i++) + { + str+="*"; + } + return email.substring(0, 2) + str+"@" + emailSplited[1]; + } + else{ + return email; + } + } + catch (Exception e){ + } return email; + } + + /** * 이름 masking 후 리턴
* 변환 실패시 입력값 그대로 리턴
*/ + public static String maskName(String name){ + try{ + if(StringUtils.isEmpty(name)){ + return name; + } + if(name.length() == 2){ + + return name.substring(0, 1)+"*"; + } + else if(name.length() >2){ + String str=""; + for(int i = 2; name.length()>i;i++) + str+="*"; + return name.substring(0, 1)+str+name.substring(name.length()-1,name.length()); + } + } + catch (Exception e){ + } return name; + } } diff --git a/src/main/webapp/mail/mail_template.html b/src/main/webapp/mail/mail_template.html index 09fca549..d9f6ba43 100644 --- a/src/main/webapp/mail/mail_template.html +++ b/src/main/webapp/mail/mail_template.html @@ -6,7 +6,7 @@ -${userName}님 회원가입이 완료되었습니다. +${contents}님 회원가입이 완료되었습니다. \ No newline at end of file diff --git a/src/main/webapp/mail/pwd_mail_template.html b/src/main/webapp/mail/pwd_mail_template.html index 52237684..d75ebdfc 100644 --- a/src/main/webapp/mail/pwd_mail_template.html +++ b/src/main/webapp/mail/pwd_mail_template.html @@ -6,7 +6,7 @@ -초기화된 비밀번호는 ${userPwd} 입니다. +초기화된 비밀번호는 ${contents} 입니다. \ No newline at end of file