내 블로그 목록

2018년 8월 13일 월요일

[SpringFramework] 네아로(네이버 아이디로 로그인) API 연동 및 JSON 결과값 처리

[네아로 API 연동을 위해서 해야할 일]


  1. 네아로 홈페이지에서 ClientId 값과 ClientSecret 값 따오기
  2. Spring에서 네아로 연동하기


이 부분은  http://songc92.tistory.com/41 이 블로그에서 아주 잘 정리 되어있다.
그대로 따라하면 된다.  


그대로 따라하면


콘솔 창에서 이렇게 JSon 처럼 생긴 toString값을 출력하는 것을 볼 수 있다.


우리가 하고 싶은 것은, 이 toString 값을 key값에 따라 쪼개서 DB에 넣는 것이다.


[네아로 Json 결과값 처리를 위해서 해야할 일]
  1. pom.xml에서 라이브러리 설치 _ jsurfer-jsonsimple, json-simple
  2. Controller에서 JsonParser 이용하여 key 값으로 데이터 쪼개주기
  3. 쪼갠 데이터를 DB에 넣기


(1)pom.xml에서 라이브러리 설치 _ jsurfer-jsonsimple, json-simple


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
       <!-- 08/13 네이버 로그인 정보를 연결하려는 처절한 몸부림2 -->
       <!-- https://mvnrepository.com/artifact/com.github.jsurfer/jsurfer-jsonsimple -->
       <dependency>
           <groupId>com.github.jsurfer</groupId>
           <artifactId>jsurfer-jsonsimple</artifactId>
           <version>1.4.1</version>
       </dependency>
       <!-- 08/13 네이버 로그인 정보를 연결하려는 처절한 몸부림1 : https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
       <dependency>
           <groupId>com.googlecode.json-simple</groupId>
           <artifactId>json-simple</artifactId>
           <version>1.1.1</version>
       </dependency>
       <!-- 08/13 네이버 로그인 연동 : https://mvnrepository.com/artifact/com.github.scribejava/scribejava-core -->
       <dependency>
           <groupId>com.github.scribejava</groupId>
           <artifactId>scribejava-core</artifactId>
           <version>2.8.1</version>
       </dependency>


3번은 네이버 연동 시에 필요한 라이브러리이다.  http://songc92.tistory.com/41 이 블로그를 따라하면서 모두

(2)Controller에서 JsonParser 이용하여 key 값으로 데이터 쪼개주기
(3)쪼갠 데이터를 DB에 넣기

http://songc92.tistory.com/41 이 블로그에서 작성했던 [LoginController.java]에서
callback 함수 안에서 구현 했다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// 네이버 로그인 처리 메서드 : 네이버 로그인 성공 시 callback 호출 메소드
   @RequestMapping(value = "/member/naverCallback", method = { RequestMethod.GET, RequestMethod.POST })
   public String callback(Model model, @RequestParam String code, @RequestParam String state, HttpSession session, HttpServletRequest request, Member member)
           throws IOException, ParseException, MessagingException {
       int resultCnt = 0;
       System.out.println("여기는 callback");
       OAuth2AccessToken oauthToken;
       oauthToken = naverLoginBO.getAccessToken(session, code, state);
       // 로그인 사용자 정보를 읽어온다.
       apiResult = naverLoginBO.getUserProfile(oauthToken);
       System.out.println(naverLoginBO.getUserProfile(oauthToken).toString());
       model.addAttribute("result", apiResult);
       System.out.println("result" + apiResult);
       
       //DB와 세션에 넣기
       JSONParser jsonParser = new JSONParser();
       JSONObject jsonObject = (JSONObject)jsonParser.parse(naverLoginBO.getUserProfile(oauthToken).toString());
       
       JSONObject response = (JSONObject)jsonObject.get("response");
       
       System.out.println("이것은" + jsonObject.get("response"));
       System.out.println("아이디는" + (String)response.get("id"));
       
       member.setId((String)response.get("id"));
       member.setPwd("0000"); //DB에서 Not null로 처리했기에 임의로 준 값
       member.setName((String) response.get("name"));
       member.setEmail((String) response.get("email"));
       member.setGender((String)response.get("gender"));
       /*member.setBirth((String) response.get("birthday"));*/
       
       System.out.println("멤바아이디는 " + member.getId());
       
       if(mypageMemberService.selectOneMember((String)response.get("id")).getId() == null) {
       resultCnt = regiMemberService.insertNoPhotoMember(member);
        }

       //생략 가능_세션에 담기 위해 사용했다.
       request.getSession(true).setAttribute("id", member.getId());
       return "member/naverSuccess";
   }


[regiMemberService.java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package com.bitcamp.Service;
import java.io.File;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import com.bitcamp.Dao.MemberInterfaceDao;
import com.bitcamp.Model.Member;
public class regiMemberService {
   
   @Autowired
   SqlSessionTemplate sqlsessionTemplate;
   MemberInterfaceDao dao;
   
   public int insertMember(Member member, HttpServletRequest request) throws IllegalStateException, IOException {
       
       dao = sqlsessionTemplate.getMapper(MemberInterfaceDao.class);
       int resultCnt = 0;
       
       String imgName = "";
       
       String uploadUri = "/file/photo";
       String dir = request.getSession().getServletContext().getRealPath(uploadUri);
       System.out.println(dir);
       
       if(!member.getPhotoFile().isEmpty()) {
           imgName = member.getId() +"_"+ member.getPhotoFile().getOriginalFilename();
           member.getPhotoFile().transferTo(new File(dir, imgName));
           member.setPhoto(imgName);
       }
       
       resultCnt = dao.memberInsert(member);
       return resultCnt;
       
   }
   
   public int insertNoPhotoMember(Member member) {
       
       int resultCnt = 0;
       dao = sqlsessionTemplate.getMapper(MemberInterfaceDao.class);
       resultCnt = dao.memberInsert(member);
       return resultCnt;
   }
   
   
   public boolean idCheck(String id) {
       dao = sqlsessionTemplate.getMapper(MemberInterfaceDao.class);
       boolean result = false;
       Member member = null;
       
       member = dao.selectOneMember(id);
       
       if(member==null) {
           result = true;
       }
       
       return result;
   }
}

[MemberInterfaceDao.java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.bitcamp.Dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.bitcamp.Model.Member;
public interface MemberInterfaceDao {
   
   public int memberInsert(Member member);
   public Member selectOneMember(String id);
   
   public List<Member> selectMemberList();
   public List<Member> selectMemberListPage(@Param("firstRow") int firstRow, @Param("endRow") int endRow);
   public int selectMemberCount();
   
   public boolean deleteMember(String id);
   public boolean editMember(Member member);
   
   public boolean updatePwd(@Param("id") String id, @Param("pwd") String pwd);
   
   public Member selectOneMemberByName(String name);
   
   
}


JSonParser 참고 사이트 : https://calyfactory.github.io/%EC%A0%9C%EC%9D%B4%EC%8A%A8%ED%8C%8C%EC%8B%B1/

댓글 1개:

  1. 저혹시mypageMemberService는 어디서 온건지 알 수 있을까요?

    답글삭제