From b89edcf729b9f8833407b9dbe69ef481a4937c72 Mon Sep 17 00:00:00 2001 From: JSYOO Date: Thu, 9 Sep 2021 11:27:20 +0900 Subject: [PATCH] =?UTF-8?q?=EC=88=98=EC=A0=95=ED=8E=98=EC=9D=B4=EC=A7=80,?= =?UTF-8?q?=EC=97=B0=EB=8F=99=ED=95=B4=EC=A0=9C,=20=EB=B9=84=EB=B0=80?= =?UTF-8?q?=EB=B2=88=ED=98=B8=EC=B4=88=EA=B8=B0=ED=99=94,=EB=B3=80?= =?UTF-8?q?=EA=B2=BD,=20=ED=86=B5=ED=95=A9=ED=83=88=ED=87=B4(=EC=A7=84?= =?UTF-8?q?=ED=96=89=EC=A4=91)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/oauth/service/OAuthUniversalUser.java | 18 ++ .../java/nlib/user/service/LoginService.java | 2 + .../java/nlib/user/service/MemberSiteVO.java | 8 +- .../nlib/user/service/UserInfoService.java | 42 +++- .../user/service/impl/LoginServiceImpl.java | 14 +- .../user/service/impl/MemberServiceImpl.java | 7 +- .../nlib/user/service/impl/UserInfoDAO.java | 60 ++++- .../service/impl/UserInfoServiceImpl.java | 84 ++++++- .../java/nlib/user/web/MemberController.java | 128 +++++++++- .../nlib/user/web/UserInfoController.java | 68 +++++- .../mapper/nlib/user/MemberDAO_SQL.xml | 18 +- .../mapper/nlib/user/UserInfoDAO_SQL.xml | 124 ++++++++-- .../jsp/nlib/member/deleteMembershipForm.jsp | 45 ++++ .../jsp/nlib/member/initPasswordForm.jsp | 31 ++- .../jsp/nlib/member/insertMemberInfoForm.jsp | 27 ++- .../nlib/member/selectMemberJoiningInfo.jsp | 34 ++- .../WEB-INF/jsp/nlib/userInfo/putMyInfo.jsp | 222 +++++++++++++++--- .../jsp/nlib/userInfo/pwCertMyInfo.jsp | 2 +- 18 files changed, 804 insertions(+), 130 deletions(-) create mode 100644 src/main/webapp/WEB-INF/jsp/nlib/member/deleteMembershipForm.jsp diff --git a/src/main/java/egovframework/com/ext/oauth/service/OAuthUniversalUser.java b/src/main/java/egovframework/com/ext/oauth/service/OAuthUniversalUser.java index e05c339a..4ea52aab 100644 --- a/src/main/java/egovframework/com/ext/oauth/service/OAuthUniversalUser.java +++ b/src/main/java/egovframework/com/ext/oauth/service/OAuthUniversalUser.java @@ -7,6 +7,7 @@ import nlib.util.StringUtil; public class OAuthUniversalUser { + private String mbSnsId; private String mbInfoId; private String snsId; @@ -24,6 +25,7 @@ public class OAuthUniversalUser { private String loginIp; private Date lastLogin; + private String regDd; private NlibLoginVO nlibVO; private boolean isValidLogin = false; @@ -160,4 +162,20 @@ public class OAuthUniversalUser { this.nlibVO = nlibVO; } + public String getMbSnsId() { + return mbSnsId; + } + + public void setMbSnsId(String mbSnsId) { + this.mbSnsId = mbSnsId; + } + + public String getRegDd() { + return regDd; + } + + public void setRegDd(String regDd) { + this.regDd = regDd; + } + } diff --git a/src/main/java/nlib/user/service/LoginService.java b/src/main/java/nlib/user/service/LoginService.java index 825d1362..58c76e6d 100644 --- a/src/main/java/nlib/user/service/LoginService.java +++ b/src/main/java/nlib/user/service/LoginService.java @@ -38,4 +38,6 @@ public interface LoginService public int agreeProvInfo(NlibLoginVO loginVO); + public NlibLoginVO selectLoginUserInfo(NlibLoginVO loginVO); + } \ No newline at end of file diff --git a/src/main/java/nlib/user/service/MemberSiteVO.java b/src/main/java/nlib/user/service/MemberSiteVO.java index 613254ab..43b1037c 100644 --- a/src/main/java/nlib/user/service/MemberSiteVO.java +++ b/src/main/java/nlib/user/service/MemberSiteVO.java @@ -37,10 +37,10 @@ public class MemberSiteVO implements Serializable { private String joinType; /* 가입유형 SNS 및 로그인을 연계하는 포털시스템 아이디(naver, daum 등) */ private String joinAgreeDd; /* 가입동의일자 */ private String joinCouncilCd; /* 가입문화원코드 */ + private String joinCouncilNm; /* 가입문화원명 */ private String masterYn; /* 대표여부 */ private String ipNotUse; /* 접속아이피 */ private String lastAccessDdNotUse; /* 마지막접근일자 */ - //---------------------------------------------------------------- // SETTER.GETTER //---------------------------------------------------------------- @@ -92,4 +92,10 @@ public class MemberSiteVO implements Serializable { public void setLastAccessDdNotUse(String lastAccessDdNotUse) { this.lastAccessDdNotUse = lastAccessDdNotUse; } + public String getJoinCouncilNm() { + return joinCouncilNm; + } + public void setJoinCouncilNm(String joinCouncilNm) { + this.joinCouncilNm = joinCouncilNm; + } } diff --git a/src/main/java/nlib/user/service/UserInfoService.java b/src/main/java/nlib/user/service/UserInfoService.java index 3727eb57..f3ab73d3 100644 --- a/src/main/java/nlib/user/service/UserInfoService.java +++ b/src/main/java/nlib/user/service/UserInfoService.java @@ -1,6 +1,9 @@ package nlib.user.service; +import java.util.List; + +import egovframework.com.ext.oauth.service.OAuthUniversalUser; /** * Description : @@ -21,7 +24,44 @@ package nlib.user.service; */ public interface UserInfoService { - public NlibLoginVO selectMyInfo(NlibLoginVO vo) throws Exception; + /** 사용자의 SNS 연동 리스트를 조회한다. + * @param vo + * @return + * @throws Exception + */ + public List selectSnsSignUpList(NlibLoginVO vo) throws Exception; + + /** 내 정보를 수정한다. + * @param vo + * @throws Exception + */ public void updateMyInfo(NlibLoginVO vo) throws Exception; + + /** 가입문화원 리스트를 조회한다. + * @param vo + * @return + * @throws Exception + */ + public List selectCenterSignUpList(NlibLoginVO vo) throws Exception; + + /** SNS연동을 해지한다. + * @param oAuthVO + * @throws Exception + */ + public void deleteSnsLink(OAuthUniversalUser oAuthVO) throws Exception; + + /** 문화원 가입을 해지한다. + * @param siteVO + * @throws Exception + */ + public void deleteCenterLink(MemberSiteVO siteVO) throws Exception; + + /** 사용자의 정보를 조회한다. + * @param vo + * @return + * @throws Exception + */ + public NlibLoginVO selectMyInfo(NlibLoginVO vo) throws Exception; + } \ No newline at end of file diff --git a/src/main/java/nlib/user/service/impl/LoginServiceImpl.java b/src/main/java/nlib/user/service/impl/LoginServiceImpl.java index 14d27e92..1ea365b7 100644 --- a/src/main/java/nlib/user/service/impl/LoginServiceImpl.java +++ b/src/main/java/nlib/user/service/impl/LoginServiceImpl.java @@ -121,12 +121,18 @@ public class LoginServiceImpl implements LoginService return ERR_CODE_REQ_MEMBERSHIP; } - // 휴면계좌 확인 + // 휴면계정 확인 if("P".equals(nLoginVO.getStatus())) { oUser.setNlibVO(nLoginVO); return WRN_CODE_DORMANT; } + // 탈퇴계정 확인 + if("D".equals(nLoginVO.getStatus())) { + oUser.setNlibVO(nLoginVO); + return ERR_CODE_REQ_MEMBERSHIP; + } + // 해당 지방문화원에 미등록된 경우, 정보제공 동의로 이동 처리 필요 if(StringUtil.isEmpty(nLoginVO.getJoinCouncilCd())) { oUser.setNlibVO(nLoginVO); @@ -216,6 +222,12 @@ public class LoginServiceImpl implements LoginService public int agreeProvInfo(NlibLoginVO loginVO) { return loginDAO.agreeProvInfo(loginVO); } + + + + public NlibLoginVO selectLoginUserInfo(NlibLoginVO loginVO) { + return loginDAO.selectLoginUserInfo(loginVO); + } /* SNS 연동 SSO를 통한 로그인 처리한다. * diff --git a/src/main/java/nlib/user/service/impl/MemberServiceImpl.java b/src/main/java/nlib/user/service/impl/MemberServiceImpl.java index f1fa605d..9d0b1481 100644 --- a/src/main/java/nlib/user/service/impl/MemberServiceImpl.java +++ b/src/main/java/nlib/user/service/impl/MemberServiceImpl.java @@ -47,12 +47,7 @@ public class MemberServiceImpl implements MemberService String encodedText=null; encodedText = egovPasswordEncoder.encryptPassword(vo.getLoginUserId()+vo.getPassword()); vo.setPassword(encodedText); - vo.setBirthday(ariaCrypto.encode(vo.getBirthday())); - vo.setMobileNo(ariaCrypto.encode(vo.getMobileNo())); - vo.setEmail(ariaCrypto.encode(vo.getEmail())); - vo.setZipCode(ariaCrypto.encode(vo.getZipCode())); - vo.setAddress(ariaCrypto.encode(vo.getAddress())); - vo.setAddressDetail(ariaCrypto.encode(vo.getAddressDetail())); + vo.encodePrivateInfo(); //회원가입 정보 memberDAO.insertMemberInfo(vo); //가입한 정보의 UID select diff --git a/src/main/java/nlib/user/service/impl/UserInfoDAO.java b/src/main/java/nlib/user/service/impl/UserInfoDAO.java index 8906b173..086d82e0 100644 --- a/src/main/java/nlib/user/service/impl/UserInfoDAO.java +++ b/src/main/java/nlib/user/service/impl/UserInfoDAO.java @@ -1,12 +1,70 @@ package nlib.user.service.impl; +import java.util.List; + +import egovframework.com.ext.oauth.service.OAuthUniversalUser; import egovframework.rte.psl.dataaccess.mapper.Mapper; +import nlib.user.service.MemberSiteVO; import nlib.user.service.NlibLoginVO; +/** + *
+ * @Class Name : UserInfoDAO.java
+ * 
+ * @Description : 사용자의 관련 정보 제공 DAO 
+ * 
+ * 
+ * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
+ *
+ * 
+ * + * @ ------------ -------- --------------------------- + * @ 수정일 수정자 수정내용 + * @ ------------ -------- --------------------------- + * @ 2021. 9. 7. JSYOO 최초 생성 + * + * + * @author 이씨플라자 * DIGITALSHIP JSYOO + * @since 2021. 9. 7. + * @version 1.0 + * + */ + @Mapper("userInfoDAO") public interface UserInfoDAO { - public NlibLoginVO selectMyInfo(NlibLoginVO vo) throws Exception; + /** 사용자의 SNS 연동 리스트를 조회한다. + * @param vo + * @return + * @throws Exception + */ + public List selectSnsSignUpList(NlibLoginVO vo) throws Exception; + /** 내 정보를 수정한다. + * @param vo + * @throws Exception + */ public void updateMyInfo(NlibLoginVO vo) throws Exception; + + /** 가입문화원 리스트를 조회한다. + * @param vo + * @return + */ + public List selectCenterSignUpList(NlibLoginVO vo) throws Exception; + + /** SNS연동을 해지한다. + * @param oAuthVO + */ + public void deleteSnsLink(OAuthUniversalUser oAuthVO) throws Exception; + + /** 문화원가입을 해지한다. + * @param siteVO + */ + public void deleteCenterLink(MemberSiteVO siteVO) throws Exception; + + /** 사용자의 정보를 조회한다. + * @param vo + * @return + */ + public NlibLoginVO selectMyInfo(NlibLoginVO vo) throws Exception; } \ No newline at end of file diff --git a/src/main/java/nlib/user/service/impl/UserInfoServiceImpl.java b/src/main/java/nlib/user/service/impl/UserInfoServiceImpl.java index e50e8a51..8a10fc56 100644 --- a/src/main/java/nlib/user/service/impl/UserInfoServiceImpl.java +++ b/src/main/java/nlib/user/service/impl/UserInfoServiceImpl.java @@ -1,14 +1,42 @@ package nlib.user.service.impl; +import java.util.List; + import javax.annotation.Resource; import org.springframework.stereotype.Service; +import egovframework.com.ext.oauth.service.OAuthUniversalUser; import egovframework.rte.fdl.cryptography.EgovPasswordEncoder; +import nlib.cmm.crypto.AriaCrypto; import nlib.user.service.MemberService; +import nlib.user.service.MemberSiteVO; import nlib.user.service.NlibLoginVO; import nlib.user.service.UserInfoService; +/** + *
+ * @Class Name : UserInfoServiceImpl.java
+ * 
+ * @Description : 사용자의 정보를 조회하는 서비스 
+ * 
+ * 
+ * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
+ *
+ * 
+ * + * @ ------------ -------- --------------------------- + * @ 수정일 수정자 수정내용 + * @ ------------ -------- --------------------------- + * @ 2021. 9. 7. JSYOO 최초 생성 + * + * + * @author 이씨플라자 * DIGITALSHIP JSYOO + * @since 2021. 9. 7. + * @version 1.0 + * + */ + @Service("userInfoService") public class UserInfoServiceImpl implements UserInfoService { @@ -18,12 +46,60 @@ public class UserInfoServiceImpl implements UserInfoService @Resource(name = "egovEnvPasswordEncoderService") EgovPasswordEncoder egovPasswordEncoder; - - - public NlibLoginVO selectMyInfo(NlibLoginVO vo) throws Exception { - return userInfoDAO.selectMyInfo(vo); + @Resource(name = "ariaCrypto") + AriaCrypto ariaCrypto; + + /* 사용자의 SNS 연동 리스트를 조회한다. + * (non-Javadoc) + * @see nlib.user.service.UserInfoService#selectSnsSignUpList(nlib.user.service.NlibLoginVO) + */ + public List selectSnsSignUpList(NlibLoginVO vo) throws Exception { + return userInfoDAO.selectSnsSignUpList(vo); } + /* 내 정보를 수정한다. + * (non-Javadoc) + * @see nlib.user.service.UserInfoService#updateMyInfo(nlib.user.service.NlibLoginVO) + */ public void updateMyInfo(NlibLoginVO vo) throws Exception { + //회원정보 암호화 + vo.encodePrivateInfo(); + userInfoDAO.updateMyInfo(vo); } + + /* 가입문화원 리스트를 조회한다. + * (non-Javadoc) + * @see nlib.user.service.UserInfoService#selectCenterSignUpList(nlib.user.service.NlibLoginVO) + */ + public List selectCenterSignUpList(NlibLoginVO vo) throws Exception { + return userInfoDAO.selectCenterSignUpList(vo); + } + + /* SNS연동을 해지한다. + * (non-Javadoc) + * @see nlib.user.service.UserInfoService#deleteSnsLink(egovframework.com.ext.oauth.service.OAuthUniversalUser) + */ + public void deleteSnsLink(OAuthUniversalUser oAuthVO) throws Exception { + userInfoDAO.deleteSnsLink(oAuthVO); + } + /* 문화원 가입을 해지한다. + * (non-Javadoc) + * @see nlib.user.service.UserInfoService#deleteCenterLink(nlib.user.service.MemberSiteVO) + */ + public void deleteCenterLink(MemberSiteVO siteVO) throws Exception { + userInfoDAO.deleteCenterLink(siteVO); + } + /* 사용자의 정보를 조회한다. + * (non-Javadoc) + * @see nlib.user.service.UserInfoService#selectMyInfo(nlib.user.service.NlibLoginVO) + */ + public NlibLoginVO selectMyInfo(NlibLoginVO vo) throws Exception { + vo.setMobileNo(ariaCrypto.encode(vo.getMobileNo())); + NlibLoginVO loginVO =userInfoDAO.selectMyInfo(vo); + // 개인정보 암호화 내용 복호화 처리 + if(loginVO != null) { + loginVO.setMobileNo(AriaCrypto.decode(loginVO.getMobileNo())); + } + return loginVO; + } } \ No newline at end of file diff --git a/src/main/java/nlib/user/web/MemberController.java b/src/main/java/nlib/user/web/MemberController.java index 52ddd533..2547d6f9 100644 --- a/src/main/java/nlib/user/web/MemberController.java +++ b/src/main/java/nlib/user/web/MemberController.java @@ -23,6 +23,7 @@ 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; @@ -60,6 +61,7 @@ import egovframework.com.ext.oauth.service.OAuthLogin; import egovframework.com.ext.oauth.service.OAuthUniversalUser; import egovframework.com.ext.oauth.service.OAuthVO; import egovframework.rte.fdl.cryptography.EgovPasswordEncoder; +import nlib.cmm.NlibCommonController; import nlib.cmm.crypto.AriaCrypto; import nlib.cmm.service.NlibProperty; import nlib.cmm.session.SessionConfig; @@ -69,6 +71,7 @@ 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.MemberSiteVO; @@ -76,6 +79,7 @@ import nlib.user.service.UserInfoService; import nlib.util.StringUtil; import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.security.core.Authentication; /** *
@@ -101,7 +105,7 @@ import org.springframework.mail.javamail.JavaMailSender;
  */
 
 @Controller
-public class MemberController {
+public class MemberController extends NlibCommonController{
 	
 	//-------------------------------------------
 		// SNS 연동 환경설정 정보 : context-oauth.xml 참고 
@@ -125,6 +129,9 @@ public class MemberController {
 	@Resource(name="informService")
 	private InformService informService;
 
+	@Resource(name="loginService")
+	private LoginService loginService;
+	
 	@Resource(name = "egovEnvPasswordEncoderService")
     EgovPasswordEncoder egovPasswordEncoder;
 	
@@ -187,6 +194,10 @@ public class MemberController {
 	 */
 	@RequestMapping(value="/member/selectMemberJoiningInfo.do")
 	public String selectMemberJoiningInfo(HttpServletRequest req,ModelMap model,HttpSession session) throws Exception  {
+		//이용약관 및 개인정보제공동의
+		HashMap termRet = informService.selectTermsInfo(NlibProperty.getString("nlib.council.cd"));
+		HashMap privacyRet = informService.selectPrivacyInfo(NlibProperty.getString("nlib.council.cd"));
+		
 		String jsessionId = session.getId();
 		OAuthUniversalUser oauthUser = SessionConfig.getNewMemberInfo(jsessionId);
 		
@@ -200,6 +211,14 @@ public class MemberController {
 			model.addAttribute("url","/nlib"+NlibProperty.getString("login.url"));
 			return "nlib/cmm/alert";
 		}
+		
+		
+
+    	model.addAttribute("termTitle", termRet.get("TITLE"));
+    	model.addAttribute("termContent", termRet.get("CONTENT"));
+    	
+    	model.addAttribute("privacyTitle", privacyRet.get("TITLE"));
+    	model.addAttribute("privacyContent", privacyRet.get("CONTENT"));
 		return "/nlib/member/selectMemberJoiningInfo";
 	}
 	
@@ -305,7 +324,7 @@ public class MemberController {
 				if(!(vo.getMobileVrfctNo().equals(oauthUser.getNlibVO().getMobileVrfctNo()))
 						||oauthUser.getNlibVO().getMobileVrfctDd() == null)  
 				{
-					model.addAttribute("msg","핸드폰인증에 문제가 있습니다. 다시 회원가입을 진행해주세요.");
+					model.addAttribute("msg","핸드폰인증이 정상적이지않습니다. 다시 회원가입을 진행해주세요.");
 					model.addAttribute("url","${pageContext.request.contextPath}"+NlibProperty.getString("member.new.url"));
 					return "nlib/cmm/alert";
 				}
@@ -318,7 +337,7 @@ public class MemberController {
 				if(!(vo.getEmailVrfctDd().equals(oauthUser.getNlibVO().getEmailVrfctDd()))
 						||oauthUser.getNlibVO().getEmailVrfctDd() == null)  
 				{
-					model.addAttribute("msg","이메일인증에 문제가 있습니다. 다시 회원가입을 진행해주세요.");
+					model.addAttribute("msg","이메일인증이 정상적이지않습니다. 다시 회원가입을 진행해주세요.");
 					model.addAttribute("url","${pageContext.request.contextPath}"+NlibProperty.getString("member.new.url"));
 					return "nlib/cmm/alert";
 				}
@@ -379,9 +398,24 @@ public class MemberController {
 	 * @exception Exception
 	 */
 	@RequestMapping(value="/member/emailCertNum.ajax" , method=RequestMethod.POST)
-	public @ResponseBody void emailCertNum(HttpServletResponse response,HttpServletRequest request,HttpSession session) throws Exception{
+	public @ResponseBody Map emailCertNum(HttpServletResponse response,HttpServletRequest request,HttpSession session) throws Exception{
 		String email = request.getParameter("email");
+		Map map = new HashMap();
+		
+		OAuthUniversalUser authUser= new OAuthUniversalUser();
+		authUser.setSnsUserId(email);
+		authUser.setSnsEmail(email);
+		
+		//중복된 아이디가 있을시
+		if(memberService.selectAlreadySignUpId(authUser) != null)
+		{
+			map.put("msg","이미 사용중인 이메일입니다.");
+	    	map.put("emailCertYn","N");
+			return map;
+		}
+		
 		EmailVO emailVO = new EmailVO();
+		
 		//인증번호 생성
 		String CertNumber=memberService.numberGen(6,1);
 		System.out.println(CertNumber);
@@ -398,6 +432,7 @@ public class MemberController {
 		oauthUser.setNlibVO(vo);
 		SessionConfig.setNewMemberInfo(jsessionId,oauthUser);
 		
+		
 		//이메일 발송
 		// 결과가 정상이면, 안내 메일 발송 
     	// > 템플릿파일에서 내용 mailing.sender.membership.template
@@ -426,8 +461,9 @@ public class MemberController {
     	emailVO.setSubject(subject);
     	emailVO.setContent(contents);
     	emailSender.SendEmail(emailVO);
-		
-		//------------
+    	map.put("msg","이메일 인증번호가 발송됐습니다.");
+    	map.put("emailCertYn","Y");
+		return map;
 	}
 	
 	/**
@@ -519,6 +555,19 @@ public class MemberController {
 		}
 	}
 	
+	/**
+	 * 회원탈퇴 폼
+	 * @exception Exception
+	 */
+	@RequestMapping(value="/member/deleteMembershipForm.do")
+	public String deleteMembershipForm(HttpServletResponse response,Authentication authentication,HttpServletRequest request,ModelMap model) throws Exception{
+		//사용자 정보를 가져온다.
+		NlibLoginVO loginVO = getNlibLoginVO(authentication);
+		loginVO.decodePrivateInfo();
+		loginVO.setLoginUserId(maskingEmail(loginVO.getLoginUserId()));
+		model.addAttribute("loginVO",loginVO);
+		return "nlib/member/deleteMembershipForm";
+	}
     /**
 	 * 비밀번호초기화 폼
 	 * @exception Exception
@@ -536,7 +585,7 @@ public class MemberController {
 	@RequestMapping(value="/member/initPassword.ajax")
 	public @ResponseBody String initPassword(NlibLoginVO vo,HttpServletResponse response,HttpServletRequest request,ModelMap model) throws Exception{
 		
-		NlibLoginVO loginVO =userInfoService.selectMyInfo(vo);
+		NlibLoginVO loginVO=userInfoService.selectMyInfo(vo);
 		
 		EmailVO email = new EmailVO();
 		
@@ -546,9 +595,9 @@ public class MemberController {
 		String InitPwd=memberService.createInitPwd();
 		
 		String encodedText=null;
-
+		
 		//ID와 핸드폰 번호가 일치하는지 확인
-		if(loginVO!=null && (loginVO.getMobileNo().equals(vo.getMobileNo()) && loginVO.getLoginUserId().equals(vo.getLoginUserId())))
+		if(loginVO!=null && loginVO.getLoginUserId().equals(vo.getLoginUserId()))
 		{
 			String reciver = vo.getLoginUserId(); //받을사람의 이메일입니다.-> naver nate 등등 
 	        String subject = "온라인자료대출시스템 비밀번호 초기화 메일입니다.";
@@ -572,11 +621,11 @@ public class MemberController {
 	    		contents+=readLine;
 	    	}
 	    	
-	    	encodedText = egovPasswordEncoder.encryptPassword(InitPwd);
+	    	encodedText = egovPasswordEncoder.encryptPassword(loginVO.getLoginUserId()+InitPwd);
 			vo.setPassword(encodedText);
 				
 			vo.setMbInfoId(gUserId);
-				
+			
 			//암호화된 비밀번호로 수정
 			memberService.changePassword(vo);
 				
@@ -598,7 +647,62 @@ public class MemberController {
 		return message;
 	}
 	
-
+	/**
+	 * 비밀번호 변경
+	 * @exception Exception
+	 */
+	@RequestMapping(value="/member/changePassword.ajax")
+	public @ResponseBody String changePassword(Authentication authentication,HttpServletResponse response,HttpServletRequest request,ModelMap model) throws Exception{
+		//사용자 정보를 가져온다.
+		NlibLoginVO loginVO = getNlibLoginVO(authentication);
+		loginVO.setJoinCouncilCd(getCurCouncilCd(request));
+				
+		loginVO = loginService.selectLoginUserInfo(loginVO);
+		
+		String password=egovPasswordEncoder.encryptPassword(loginVO.getLoginUserId()+request.getParameter("password"));
+		String newPassword=egovPasswordEncoder.encryptPassword(loginVO.getLoginUserId()+request.getParameter("newPassword"));
+		
+		String message="";
+		
+		if(loginVO!=null && (loginVO.getPassword().equals(password)))
+		{
+			loginVO.setPassword(newPassword);
+			
+			//암호화된 비밀번호로 수정
+			memberService.changePassword(loginVO);
+	        message="비밀번호 변경이 처리되었습니다.";
+		}else {
+			message="기존 비밀번호가 올바르지 않습니다.";
+		}
+		
+		return message;
+	}
+	
+	/** * 이메일 masking 후 리턴
* 변환 실패시 입력값 그대로 리턴
* 이메일 아이디 앞 2자리 노출
* 마스킹 처리는 글자수 상관없이 5자리로 노출 * */ + 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; + } /** * 회원가입 SNS 구글인증 * @exception Exception diff --git a/src/main/java/nlib/user/web/UserInfoController.java b/src/main/java/nlib/user/web/UserInfoController.java index 799ae178..37bfb014 100644 --- a/src/main/java/nlib/user/web/UserInfoController.java +++ b/src/main/java/nlib/user/web/UserInfoController.java @@ -1,7 +1,9 @@ package nlib.user.web; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import javax.annotation.Resource; @@ -9,18 +11,25 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; +import egovframework.com.ext.oauth.service.OAuthUniversalUser; import egovframework.rte.fdl.cryptography.EgovPasswordEncoder; import nlib.restful.service.DataApiReqVO; import nlib.security.SecUserVO; +import nlib.user.service.LoginService; import nlib.user.service.MemberService; +import nlib.user.service.MemberSiteVO; import nlib.user.service.NlibLoginVO; import nlib.user.service.UserInfoService; +import nlib.cmm.NlibCommonController; +import nlib.cmm.service.NlibProperty; /** @@ -46,11 +55,14 @@ import nlib.user.service.UserInfoService; * */ @Controller -public class UserInfoController { +public class UserInfoController extends NlibCommonController { @Resource(name="userInfoService") private UserInfoService userInfoService; + @Resource(name="loginService") + private LoginService loginService; + @Resource(name = "egovEnvPasswordEncoderService") EgovPasswordEncoder egovPasswordEncoder; @@ -69,20 +81,36 @@ public class UserInfoController { */ @RequestMapping(value="/userInfo/putMyInfo.do") public String putMyInfo(NlibLoginVO vo,HttpServletResponse response,HttpServletRequest request,Authentication authentication,ModelMap model) throws Exception{ - NlibLoginVO loginVO =userInfoService.selectMyInfo(vo); + //사용자 정보를 가져온다. + NlibLoginVO loginVO = getNlibLoginVO(authentication); + loginVO.setJoinCouncilCd(getCurCouncilCd(request)); + + loginVO = loginService.selectLoginUserInfo(loginVO); + + + List snsList = new ArrayList(); + List centerList = new ArrayList(); + + //sns연동 계정 리스트 + snsList = userInfoService.selectSnsSignUpList(loginVO); + + //가입된 문화원 리스트 + centerList = userInfoService.selectCenterSignUpList(loginVO); String encodedText=null; - encodedText = egovPasswordEncoder.encryptPassword(vo.getPassword()); + encodedText = egovPasswordEncoder.encryptPassword(loginVO.getLoginUserId()+vo.getPassword()); vo.setPassword(encodedText); //암호화된 패스워드 비교 if(loginVO.getPassword().equals(vo.getPassword())) { model.addAttribute("loginVO",loginVO); + model.addAttribute("centerList",centerList); + model.addAttribute("snsList",snsList); return "nlib/userInfo/putMyInfo"; }else { - String message="비밀번호가 잘못되었습니다."; - model.addAttribute("message",message); - return "nlib/userInfo/pwCertMyInfo"; + model.addAttribute("msg","비밀번호가 일치하지않습니다."); + model.addAttribute("url","/nlib/userInfo/pwCertMyInfo.do"); + return "nlib/cmm/alert"; } } @@ -100,6 +128,7 @@ public class UserInfoController { userInfoService.updateMyInfo(vo); } + /** * 내 정보 수정 전 password 인증 * @exception Exception @@ -109,4 +138,31 @@ public class UserInfoController { return "nlib/userInfo/pwCertMyInfo"; } + + /** SNS연동을 해지한다. + * @param response + * @param request + * @return + * @return + * @throws Exception + */ + @RequestMapping(value="/userInfo/deleteSnsLink.ajax") + public @ResponseBody void deleteSnsLink(HttpServletResponse response,HttpServletRequest request) throws Exception{ + OAuthUniversalUser oAuthVO = new OAuthUniversalUser(); + oAuthVO.setMbSnsId(request.getParameter("mbSnsId")); + userInfoService.deleteSnsLink(oAuthVO); + + } + /** 문화원 가입을 해지한다. + * @param response + * @param request + * @return + * @throws Exception + */ + @RequestMapping(value="/userInfo/deleteCenterLink.ajax") + public @ResponseBody void deleteCenterLink(HttpServletResponse response,HttpServletRequest request) throws Exception{ + MemberSiteVO siteVO = new MemberSiteVO(); + siteVO.setMbSiteId(request.getParameter("mbSiteId")); + userInfoService.deleteCenterLink(siteVO); + } } \ No newline at end of file diff --git a/src/main/resources/egovframework/mapper/nlib/user/MemberDAO_SQL.xml b/src/main/resources/egovframework/mapper/nlib/user/MemberDAO_SQL.xml index f3040eea..09c972fb 100644 --- a/src/main/resources/egovframework/mapper/nlib/user/MemberDAO_SQL.xml +++ b/src/main/resources/egovframework/mapper/nlib/user/MemberDAO_SQL.xml @@ -75,14 +75,13 @@ UPDATE - TMP_SM_USER + MB_INFO SET - USER_PWD=#{userPwd} - ,MOD_ID = #{userId} - ,MOD_DD = SYSDATE() + PASSWORD=#{password} + ,MOD_ID = #{mbInfoId} + ,MOD_DD = NOW() WHERE 1=1 AND LOGIN_USER_ID = #{loginUserId} - AND TEL_NO = #{telNo} @@ -108,6 +107,7 @@ MB_SNS WHERE 1=1 AND SNS_USER_ID = #{snsUserId} + AND UNLINK_DD IS NULL ) MB GROUP BY MB_INFO_ID @@ -122,6 +122,7 @@ MB_INFO WHERE 1=1 AND MOBILE_NO = #{mobileNo} + LIMIT 1 @@ -190,7 +191,8 @@ MB_SITE WHERE 1=1 AND MB_INFO_ID = #{mbInfoId} - AND JOIN_COUNCIL_CD = #{joinCouncilCd}; + AND JOIN_COUNCIL_CD = #{joinCouncilCd} + AND UNLINK_DD IS NULL; @@ -201,6 +203,8 @@ MB_SNS WHERE 1=1 AND SNS_ID = #{snsId} - AND SNS_TYPE = #{snsType}; + AND SNS_TYPE = #{snsType} + AND UNLINK_DD IS NULL + \ No newline at end of file diff --git a/src/main/resources/egovframework/mapper/nlib/user/UserInfoDAO_SQL.xml b/src/main/resources/egovframework/mapper/nlib/user/UserInfoDAO_SQL.xml index 44f1c8f2..1a1c2962 100644 --- a/src/main/resources/egovframework/mapper/nlib/user/UserInfoDAO_SQL.xml +++ b/src/main/resources/egovframework/mapper/nlib/user/UserInfoDAO_SQL.xml @@ -5,7 +5,6 @@ - @@ -16,34 +15,119 @@ - - - + SELECT + MB_SNS_ID + ,MB_INFO_ID + ,SNS_TYPE + ,SNS_ID + ,SNS_USER_ID + ,REG_DD + FROM + MB_SNS + WHERE 1=1 + AND MB_INFO_ID = #{mbInfoId} + AND UNLINK_DD IS NULL + + + + + /* updateMyInfo */ UPDATE - TMP_SM_USER + MB_INFO SET - USER_NM=#{userNm} - ,USER_PWD=#{userPwd} - ,BIRTHDATE=#{birthdate} + NAME=#{name} + ,BIRTHDAY=#{birthday} + ,MOBILE_NO=#{mobileNo} + ,ZIP_CODE=#{zipCode} + ,ADDRESS=#{address} + ,ADDRESS_DETAIL=#{addressDetail} ,GENDER=#{gender} - ,TEL_NO=#{telNo} - ,ZIPCODE=#{zipcode} - ,ADDR1=#{addr1} - ,ADDR2=#{addr2} + ,MOD_ID=#{mbInfoId} + ,MOD_DD=NOW() WHERE 1=1 - AND USER_ID="U2000000003" + AND MB_INFO_ID=#{mbInfoId} + + + + + UPDATE + MB_SNS + SET + UNLINK_DD=NOW() + WHERE 1=1 + + AND MB_SNS_ID = #{mbSnsId}; + + + AND MB_INFO_ID = #{mbInfoId}; + + + + + UPDATE + MB_SITE + SET + UNLINK_DD=NOW() + WHERE 1=1 + + AND MB_SITE_ID = #{mbSiteId}; + + + AND MB_INFO_ID = #{mbInfoId}; + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/nlib/member/deleteMembershipForm.jsp b/src/main/webapp/WEB-INF/jsp/nlib/member/deleteMembershipForm.jsp new file mode 100644 index 00000000..61ee3157 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/nlib/member/deleteMembershipForm.jsp @@ -0,0 +1,45 @@ +<% +/** + *
+ * @Class Name : deleteMembershipForm.jsp
+ * 
+ * @Description : 회원탈퇴폼
+ * 
+ * 
+ * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
+ *
+ * 
+ * + * @ ------------ -------- --------------------------- + * @ 수정일 수정자 수정내용 + * @ ------------ -------- --------------------------- + * @ 2021. 9. 9. JSYOO 최초 생성 + * + * + * @author 이씨플라자 * DIGITALSHIP JSYOO + * @since 2021. 9. 9. + * @version 1.0 + * + */ + %> +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%> + + + + + + +
+ 회원탈퇴
+ 이름 :
+ 이메일 :
+
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/nlib/member/initPasswordForm.jsp b/src/main/webapp/WEB-INF/jsp/nlib/member/initPasswordForm.jsp index 7d424cb4..503307d3 100644 --- a/src/main/webapp/WEB-INF/jsp/nlib/member/initPasswordForm.jsp +++ b/src/main/webapp/WEB-INF/jsp/nlib/member/initPasswordForm.jsp @@ -43,19 +43,24 @@ function goFindPw(){ var data = $("form[name=initPw]").serialize(); - $.ajax({ - url : "/nlib/member/initPassword.ajax", - type : "POST", - data : data, - success : function(result){ - - alert(result); - location.href='${pageContext.request.contextPath}/login/loginForm.do'; - - },error : function(){ - alert("이메일 발송에 실패하였습니다."); - } - }) + if(confirm("비밀번호를 초기화 하시겠습니까?")) + { + $.ajax({ + url : "/nlib/member/initPassword.ajax", + type : "POST", + data : data, + success : function(result){ + + alert(result); + location.href='${pageContext.request.contextPath}/login/loginForm.do'; + + },error : function(){ + alert("이메일 발송에 실패하였습니다."); + } + }) + } + + } diff --git a/src/main/webapp/WEB-INF/jsp/nlib/member/insertMemberInfoForm.jsp b/src/main/webapp/WEB-INF/jsp/nlib/member/insertMemberInfoForm.jsp index a0a172e3..1d688941 100644 --- a/src/main/webapp/WEB-INF/jsp/nlib/member/insertMemberInfoForm.jsp +++ b/src/main/webapp/WEB-INF/jsp/nlib/member/insertMemberInfoForm.jsp @@ -110,15 +110,12 @@ $(document).ready(function() { if($("#snsMobileNo").val() == $("#mobileNo").val()) { $("#mobileCertYn").val("Y"); - $("#mobileCertForm").css("display","none"); $("#mobileCertSendBtn").css("display","none"); - + $("#mobileCertForm").css("display","none"); }else{ $("#mobileCertYn").val("N"); - $("#mobileCertForm").css("display","block") $("#mobileCertSendBtn").css("display","block"); } - }); <% //아이디가 변하는것 실시간 감지 @@ -127,17 +124,13 @@ $(document).ready(function() { if($("#snsUserId").val() == $("#loginUserId").val()) { $("#emailCertYn").val("Y"); - $("#emailCertForm").css("display","none"); $("#emailCertSendBtn").css("display","none"); + $("#emailCertForm").css("display","none"); }else{ $("#emailCertYn").val("N"); - $("#emailCertForm").css("display","block") $("#emailCertSendBtn").css("display","block"); } - $("#emailCertYn").val("N"); - $("#getEmailCert").css("display","block") - //snsUserId }); }) <% @@ -160,11 +153,18 @@ function emailCert(){ async: false, data : {"email" : $("#loginUserId").val()}, success : function(result){ - alert("이메일 인증번호가 발송됐습니다."); - $("#emailCertYn").val("N"); - //인증번호 확인창 - $("#emailCertForm").css("display","block") + alert(result.msg); + if(result.emailCertYn=="Y") + { + $("#emailCertYn").val("Y"); + $("#emailCertForm").css("display","block") + } + if(result.emailCertYn=="N") + { + $("#emailCertYn").val("N"); + $("#emailCertForm").css("display","none") + } },error : function(){ } }) @@ -221,6 +221,7 @@ function mobileCert(){ success : function(result){ alert("인증번호가 발송됐습니다."); $("#mobileCertYn").val("N"); + $("#mobileCertForm").css("display","block") },error : function(){ } }) diff --git a/src/main/webapp/WEB-INF/jsp/nlib/member/selectMemberJoiningInfo.jsp b/src/main/webapp/WEB-INF/jsp/nlib/member/selectMemberJoiningInfo.jsp index 5cbd0afb..5c129d51 100644 --- a/src/main/webapp/WEB-INF/jsp/nlib/member/selectMemberJoiningInfo.jsp +++ b/src/main/webapp/WEB-INF/jsp/nlib/member/selectMemberJoiningInfo.jsp @@ -22,8 +22,14 @@ * */ %> -<%@ page language="java" contentType="text/html; charset=UTF-8" - pageEncoding="UTF-8"%> +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> @@ -32,6 +38,18 @@ Insert title here