From 0fc3290647fa73a00d5f27c996add1e613813d69 Mon Sep 17 00:00:00 2001 From: JSYOO Date: Mon, 30 Aug 2021 14:55:36 +0900 Subject: [PATCH] =?UTF-8?q?SNS=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=B9=B4?= =?UTF-8?q?=EC=B9=B4=EC=98=A4,=EA=B5=AC=EA=B8=80=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 +- .../com/ext/oauth/service/OAuthLogin.java | 133 +++++++++++++----- .../java/nlib/user/web/MemberController.java | 22 +-- .../mapper/nlib/user/MemberDAO_SQL.xml | 16 +-- .../mapper/nlib/user/UserInfoDAO_SQL.xml | 27 ++-- .../egovframework/spring/context-oauth.xml | 8 +- src/main/resources/nlib/nlib.properties | 2 +- .../jsp/nlib/member/initPasswordForm.jsp | 6 +- .../jsp/nlib/member/insertMemberInfoForm.jsp | 72 +++++----- .../WEB-INF/jsp/nlib/userInfo/putMyInfo.jsp | 70 ++++----- 10 files changed, 210 insertions(+), 152 deletions(-) diff --git a/pom.xml b/pom.xml index 5206bb4a..bb7807b9 100644 --- a/pom.xml +++ b/pom.xml @@ -342,13 +342,15 @@ com.github.scribejava scribejava-apis - 5.6.0 + + 8.3.1 + com.github.scribejava scribejava-core - 5.6.0 + 8.3.1 diff --git a/src/main/java/egovframework/com/ext/oauth/service/OAuthLogin.java b/src/main/java/egovframework/com/ext/oauth/service/OAuthLogin.java index ed6f1b24..81681897 100644 --- a/src/main/java/egovframework/com/ext/oauth/service/OAuthLogin.java +++ b/src/main/java/egovframework/com/ext/oauth/service/OAuthLogin.java @@ -1,11 +1,27 @@ package egovframework.com.ext.oauth.service; +import java.io.IOException; +import java.net.URI; import java.util.Iterator; import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.ResponseErrorHandler; +import org.springframework.web.client.RestTemplate; +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.builder.ScopeBuilder; import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthRequest; @@ -13,6 +29,7 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import nlib.cmm.snslogin.GoogleOAuthResponse; import nlib.user.service.LoginService; import nlib.util.StringUtil; @@ -23,12 +40,30 @@ public class OAuthLogin { public OAuthLogin(OAuthVO oauthVO) { + ScopeBuilder scope=new ScopeBuilder(); + scope.withScope("profile"); + scope.withScope("openid"); + scope.withScope("email"); + scope.withScope("https://www.googleapis.com/auth/user.phonenumbers.read"); + scope.withScope("https://www.googleapis.com/auth/user.birthday.read"); + + if(oauthVO.getService().equals("google")) + { + this.oauthService = new ServiceBuilder(oauthVO.getClientId()) + .apiSecret(oauthVO.getClientSecret()) + .callback(oauthVO.getRedirectUrl()) + .defaultScope(scope) + //.scope("profile") + .build(oauthVO.getApi20Instance()); + }else if(oauthVO.getService().equals("kakao") || oauthVO.getService().equals("naver")) + { + this.oauthService = new ServiceBuilder(oauthVO.getClientId()) + .apiSecret(oauthVO.getClientSecret()) + .callback(oauthVO.getRedirectUrl()) + //.scope("profile") + .build(oauthVO.getApi20Instance()); + } - this.oauthService = new ServiceBuilder(oauthVO.getClientId()) - .apiSecret(oauthVO.getClientSecret()) - .callback(oauthVO.getRedirectUrl()) - .scope("profile") - .build(oauthVO.getApi20Instance()); this.oauthVO = oauthVO; } @@ -66,25 +101,36 @@ public class OAuthLogin { user.setSnsId(resNode.get("id").asText()); // 사용자로그인ID (메일형식) : 네이버 계정 제공하지 않으므로 연락처 이메일을 기본 메일 계정으로 설정 - user.setLoginUserId(resNode.get("email").asText()); + if (resNode.has("email")) { + user.setLoginUserId(StringUtil.getString(resNode.get("email").asText(), "")); + + // 메일주소 + user.setEmail(StringUtil.getString(resNode.get("email").asText(), "")); + } // 사용자명 (예: 홍길동) - user.setName(resNode.get("name").asText()); + if (resNode.has("name")) { + user.setName(StringUtil.getString(resNode.get("name").asText(), "")); + } - // 메일주소 - user.setEmail(resNode.get("email").asText()); - - // 생년월일 - String birthday = StringUtil.getString(resNode.get("birthday").asText(), "0000"); - String birthyear = StringUtil.getString(resNode.get("birthyear").asText(), "0000"); + // 생년월일 + String birthday ="0000"; + String birthyear = "0000"; + if (resNode.has("birthday")) { + birthday = StringUtil.getString(resNode.get("birthday").asText(), "0000"); + } + if (resNode.has("birthyear")) { + birthyear = StringUtil.getString(resNode.get("birthyear").asText(), "0000"); + } birthday = birthday.replaceAll("-", ""); if(birthday.length() != 4) birthday = "0000"; if(birthyear.length() != 4) birthyear = "0000"; user.setBirthday(birthyear + birthday); // 성별 - user.setGender(resNode.get("gender").asText()); - + if (resNode.has("gender")) { + StringUtil.getString(resNode.get("gender").asText(), ""); + } // 로그인 성공 user.setValidLogin(true); @@ -93,24 +139,13 @@ public class OAuthLogin { // 구글 //------------------------------------ else if (this.oauthVO.isGoogle()) { - String id = rootNode.get("id").asText(); user.setServiceName(OAuthConfig.GOOGLE_SERVICE_NAME); - if (oauthVO.isGoogle()) - user.setLoginUserId(id); - user.setNickName(rootNode.get("displayName").asText()); - JsonNode nameNode = rootNode.path("name"); - String uname = nameNode.get("familyName").asText() + nameNode.get("givenName").asText(); - user.setName(uname); - - Iterator iterEmails = rootNode.path("emails").elements(); - while(iterEmails.hasNext()) { - JsonNode emailNode = iterEmails.next(); - String type = emailNode.get("type").asText(); - if (StringUtils.equals(type, "account")) { - user.setEmail(emailNode.get("value").asText()); - break; - } - } + if (rootNode.has("sub")) + user.setSnsId(StringUtil.getString(rootNode.get("sub").asText(), "")); + + if (rootNode.has("email")) + user.setLoginUserId(StringUtil.getString(rootNode.get("email").asText(), "")); + } //------------------------------------ @@ -118,9 +153,24 @@ public class OAuthLogin { //------------------------------------ else if (this.oauthVO.isKakao()) { user.setServiceName(OAuthConfig.KAKAO_SERVICE_NAME); - JsonNode resNode = rootNode.get("properties"); - user.setLoginUserId(rootNode.get("id").asText()); - user.setNickName(resNode.get("nickname").asText()); + JsonNode resNode = rootNode.get("kakao_account"); + + user.setSnsId((rootNode.get("id").asText() == null) ? "" : rootNode.get("id").asText()); + + if (resNode.has("email")) { + user.setLoginUserId(StringUtil.getString(resNode.get("email").asText(), "")); + user.setEmail(StringUtil.getString(resNode.get("email").asText(), "")); + } + if (resNode.has("gender")) + user.setGender(StringUtil.getString(resNode.get("gender").asText(), "")); + + if (resNode.has("birthday") || resNode.has("birthyear")) + user.setLoginUserId((resNode.get("email").asText() == null) ? "" : resNode.get("email").asText()); + + if (resNode.has("phone_number")) + user.setMobileNo(StringUtil.getString(resNode.get("phone_number").asText(), "")); + + } return user; @@ -147,5 +197,18 @@ public class OAuthLogin { return url; } + public class MyErrorHandler implements ResponseErrorHandler { + @Override + public void handleError(ClientHttpResponse response) throws IOException { + // your error handling here + System.out.println("dd"); + } + + @Override + public boolean hasError(ClientHttpResponse response) throws IOException { + return false; + // ... + } + } } diff --git a/src/main/java/nlib/user/web/MemberController.java b/src/main/java/nlib/user/web/MemberController.java index 9e2b0b0a..e1b66ade 100644 --- a/src/main/java/nlib/user/web/MemberController.java +++ b/src/main/java/nlib/user/web/MemberController.java @@ -245,9 +245,9 @@ public class MemberController { * 핸드폰 인증번호 발송 * @exception Exception */ - @RequestMapping(value="/member/phoneCertNum.ajax" , method=RequestMethod.POST) + @RequestMapping(value="/member/mobileCertNum.ajax" , method=RequestMethod.POST) public @ResponseBody void phoneCertNum(HttpServletResponse response,HttpServletRequest request) throws Exception{ - String telNo = request.getParameter("telNo"); + String mobileNo = request.getParameter("mobileNo"); HashMap commandMap = new HashMap(); DataApiReqVO reqVO = new DataApiReqVO(); @@ -259,7 +259,7 @@ public class MemberController { reqVO.setInfo(commandMap); - System.out.println(telNo); + System.out.println(mobileNo); System.out.println(CertNumber); } @@ -270,18 +270,18 @@ public class MemberController { */ @RequestMapping(value="/member/phoneCertNumChk.ajax" , method=RequestMethod.POST) public @ResponseBody String phoneCertNumChk(HttpServletResponse response,HttpServletRequest request) throws Exception{ - String phone = request.getParameter("phone"); - String phoneCertNum = request.getParameter("phoneCertNum"); + String mobileNo = request.getParameter("mobileNo"); + String mobileCertNum = request.getParameter("mobileCertNum"); HashMap commandMap = new HashMap(); - commandMap.put("phone", phone); - commandMap.put("phoneCertNum", phoneCertNum); + commandMap.put("phone", mobileNo); + commandMap.put("phoneCertNum", mobileCertNum); DataApiReqVO reqVO = new DataApiReqVO(); reqVO.setInfo(commandMap); - System.out.println(phone); - System.out.println(phoneCertNum); + System.out.println(mobileNo); + System.out.println(mobileCertNum); return "true"; } @@ -392,7 +392,7 @@ public class MemberController { /** * 회원가입 SNS 구글인증 * @exception Exception - */ + *//* @RequestMapping(value = "/member/googleCallback.do") public String googleCallback(@RequestParam(value = "code") String authCode, HttpSession session, Model model, HttpServletRequest request,RedirectAttributes rttr) throws Exception { @@ -436,7 +436,7 @@ public class MemberController { rttr.addFlashAttribute("email",userInfo.get("email")); return "redirect:/member/insertMemberInfoForm.do"; - } + }*/ /** * 회원가입 SNS 카카오인증 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 37468082..c63c80db 100644 --- a/src/main/resources/egovframework/mapper/nlib/user/MemberDAO_SQL.xml +++ b/src/main/resources/egovframework/mapper/nlib/user/MemberDAO_SQL.xml @@ -3,16 +3,15 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + - - - - + + + - + @@ -21,7 +20,7 @@ LPAD(RIGHT(MAX(USER_ID),9)+1,9,0)) FROM TMP_SM_USER; INSERT INTO - TMP_SM_USER + MB_INFO (USER_ID,LOGIN_USER_ID,USER_DIV,USER_NM,USER_PWD,BIRTHDATE,GENDER,TEL_NO,ZIPCODE,ADDR1,ADDR2,REG_ID,MOD_ID) VALUES (#{userId},#{loginUserId},'N',#{userNm},#{userPwd},#{birthdate},#{gender},#{telNo},#{zipcode},#{addr1},#{addr2},#{userId},#{userId}) @@ -39,7 +38,4 @@ AND TEL_NO = #{telNo} - - - \ 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 9372dc89..44f1c8f2 100644 --- a/src/main/resources/egovframework/mapper/nlib/user/UserInfoDAO_SQL.xml +++ b/src/main/resources/egovframework/mapper/nlib/user/UserInfoDAO_SQL.xml @@ -3,16 +3,16 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + - - - - - - - + + + + + + + @@ -21,16 +21,7 @@