보라코딩
스프링부트 카카오 API 로그인 본문
kakaoLogin 폴더 내
kakaoLogin.html
<a href="https://kauth.kakao.com/oauth/authorize?client_id={REST API 키}&{redirect_uri=edirect_uri등록한것}&response_type=code">
카카오 로그인하기
</a>
KakaoLoginController
package com.tastemate.controller;
import com.tastemate.service.KakaoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
@Controller
@RequestMapping("/kakaoLogin")
@Slf4j
public class KakaoLoginController {
@GetMapping("/kakaoLogin")
public void kakaoLogin() {
}
@Autowired
private KakaoService kakaoService;
@RequestMapping(value="/kakaoResult",produces="application/json",method= {RequestMethod.GET, RequestMethod.POST})
public String kakaoResult(@RequestParam("code") String code){
log.info("#########" + code);
String access_Token = kakaoService.getAccessToken(code);
log.info("###access_Token#### : " + access_Token);
return "redirect:/store/main";
}
}
KakaoService
package com.tastemate.service;
import com.google.gson.JsonElement;
import org.springframework.stereotype.Service;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import com.google.gson.JsonParser;
@Service
public class KakaoService {
public String getAccessToken (String authorize_code) {
String access_Token = "";
String refresh_Token = "";
String reqURL = "https://kauth.kakao.com/oauth/token";
try {
URL url = new URL(reqURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// POST 요청을 위해 기본값이 false인 setDoOutput을 true로
conn.setRequestMethod("POST");
conn.setDoOutput(true);
// POST 요청에 필요로 요구하는 파라미터 스트림을 통해 전송
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
StringBuilder sb = new StringBuilder();
sb.append("grant_type=authorization_code");
sb.append("&client_id=본인이 발급받은 key"); //본인이 발급받은 key
sb.append("&redirect_uri=본인이 설정해 놓은 경로"); // 본인이 설정해 놓은 경로
sb.append("&code=" + authorize_code);
bw.write(sb.toString());
bw.flush();
// 결과 코드가 200이라면 성공
int responseCode = conn.getResponseCode();
System.out.println("responseCode : " + responseCode);
// 요청을 통해 얻은 JSON타입의 Response 메세지 읽어오기
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);
// Gson 라이브러리에 포함된 클래스로 JSON파싱 객체 생성
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(result);
access_Token = element.getAsJsonObject().get("access_token").getAsString();
refresh_Token = element.getAsJsonObject().get("refresh_token").getAsString();
System.out.println("access_token : " + access_Token);
System.out.println("refresh_token : " + refresh_Token);
br.close();
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return access_Token;
}
}
'코딩 > Spring' 카테고리의 다른 글
스프링부트 iamport 이니시스 환불하기!! (0) | 2023.06.08 |
---|---|
Day113_230608 스프링부트 iamport 이니시스 통합인증(토큰받기) (0) | 2023.06.08 |
알아서 잘 딱 깔끔하고 센스있게 정리하는 GitHub 핵심 개념 (2) | 2023.06.06 |
Day110_230605 스프링부트 iamport 이니시스 통합인증 (0) | 2023.06.05 |
스프링부트 시큐리티 (0) | 2023.06.05 |