반응형
이전 포스팅 : https://3unbbb.tistory.com/106
이제 가져온 토큰으로 사용자 정보를 가져와야 함
전체정보를 가져올 거니까 GET방식으로 부르기 & 요청 헤더 확인하기(access_token)
앞에 access_token은 받을 때 사용했던 방법이랑 비슷
(outputStream이아닌 inputStream 사용)
public void getUserInfo(String access_token) throws IOException {
String Access_token = access_token;
String url ="https://kapi.kakao.com/v2/user/me";
URL con_url;
try {
con_url = new URL(url);
//해당 주소 페이지로 접속 & 단일 http로 접속하기 위해 캐스팅
HttpURLConnection conn = (HttpURLConnection) con_url.openConnection();
//GET요청
conn.setRequestMethod("GET");
//POST or PUT 방식으로 요청을 보내려면 output을 true로 설정해야 함
//conn.setDoOutput(true);
//요청 헤더를 정의
conn.setRequestProperty("Authorization", "Bearer "+Access_token);
//InputStream 으로 응답 헤더와 메시지를 읽어들이는 옵션 정의
//OutputStream 으로 post 데이터를 넘겨주는 옵션 정의
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = "";
String result = "";
while ((line = br.readLine()) != null) {
result += line;
}
System.out.println("response body : " + result);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
여기까지 작성하고 실행하면 아래와 같이 로그인한 계정의 정보가 출력됨
이 정보를 json으로 파싱해서 hashMap에 담아서 컨트롤러로 넘겨주면 된다.
hashMap에 담을 때는 각각 담아야 하므로 JsonObject를 사용
내가 필요한건 property의 nickname과 kakao_account의 email, birthday 임
property와 kakao_account를 파싱
데이터가 잘 불러와지면 hashmap에 넣어준 후 컨트롤러로 전달
(전체 코드)
public HashMap<String, Object> getUserInfo(String access_token) throws IOException {
String Access_token = access_token;
String url ="https://kapi.kakao.com/v2/user/me";
HashMap<String, Object> userInfo = new HashMap<String, Object>();
URL con_url;
try {
con_url = new URL(url);
//해당 주소 페이지로 접속 & 단일 http로 접속하기 위해 캐스팅
HttpURLConnection conn = (HttpURLConnection) con_url.openConnection();
//GET요청
conn.setRequestMethod("GET");
//POST or PUT 방식으로 요청을 보내려면 output을 true로 설정해야 함
//conn.setDoOutput(true);
//요청 헤더를 정의
conn.setRequestProperty("Authorization", "Bearer "+Access_token);
//InputStream 으로 응답 헤더와 메시지를 읽어들이는 옵션 정의
//OutputStream 으로 post 데이터를 넘겨주는 옵션 정의
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = "";
String result = "";
while ((line = br.readLine()) != null) {
result += line;
}
System.out.println("response body : " + result);
//Json형식의 데이터를 파싱(gson 라이브러리 추가 다운로드하기)
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(result);
//properties와 kakao_account 안의 정보를 가져오기위해서 JsonObject로 Json 객체로 바꿔주기
JsonObject properties = element.getAsJsonObject().get("properties").getAsJsonObject();
JsonObject kakao_account = element.getAsJsonObject().get("kakao_account").getAsJsonObject();
String nickname = properties.getAsJsonObject().get("nickname").getAsString();
String birthday = kakao_account.getAsJsonObject().get("birthday").getAsString();
String email = kakao_account.getAsJsonObject().get("email").getAsString();
System.out.println("nickname : "+nickname);
System.out.println("birthday : "+birthday);
System.out.println("email : "+email);
userInfo.put("nickname", nickname);
userInfo.put("birthday", birthday);
userInfo.put("email", email);
br.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return userInfo;
}
컨트롤러 에서 뷰로 데이터 전달하기
(전체코드)
@RequestMapping(value="/oauth", method=RequestMethod.GET)
public String kakaologin(@RequestParam(value="code", required=false) String code, Model model ) throws IOException {
log.info("code : "+code);
String access_token = service.getAccessToken(code);
log.info(access_token);
model.addAttribute("userInfo",service.getUserInfo(access_token));
return "/main";
}
main.jsp
<html>
<head>
<title>Main</title>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
</head>
<body>
<div>
<h2> accessToken</h2>
<input type="text" value="${userInfo.nickname }">
<input type="text" value="${userInfo.birthday }">
<input type="text" value="${userInfo.email }">
</div>
</body>
<script src="https://developers.kakao.com/sdk/js/kakao.js"></script>
<script type="text/javascript">
</script>
</html>
>>>> 결과
nickname은 한글이라서 인코딩 문제인 듯..
다른 결과값은 잘 들고 와진다.
이제 이 정보로 회원가입 or 로그인 처리하면 될 듯.
이전 포스트와 마찬가지로 https://antdev.tistory.com/37?category=807235 포스트를 참고하였습니다.
HttpURIConnection 은 https://ibabo.tistory.com/266 블로그를 참고했습니다.
반응형
'STUDY > SPRING' 카테고리의 다른 글
Spring Boot 기본 구조 (0) | 2023.07.06 |
---|---|
의존성 주입(DI) (0) | 2022.10.28 |
카카오 로그인 API 사용하기 - 3 (0) | 2022.08.18 |
카카오 로그인 API 사용하기 -2 (1) | 2022.08.16 |
카카오 로그인 api 사용하기 -1 (0) | 2022.08.13 |