[ADD] 외부 Edge 패키지 검색 API 추가 및 ExternalAuthController, Service 로직 개선

main
bjkim 8 months ago
parent a24b3ea6b9
commit 7785fc220b

@ -7,6 +7,8 @@ import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
@RequestMapping("/api/external-auth")
@Tag(name = "ExternalAuthController", description = "외부 백엔드 로그인 및 Bearer 토큰 조회 API")
@ -15,14 +17,27 @@ public class ExternalAuthController {
private final ExternalAuthService externalAuthService;
@Operation(summary = "외부 로그인 후 Bearer 토큰 조회", description = "외부 Spring 백엔드에 로그인 요청 후 Bearer 토큰을 반환합니다.")
@Operation(summary = "외부 로그인 후 사용자 정보 조회", description = "외부 Spring 백엔드에 로그인 요청 후 id, name, token을 반환합니다.")
@PostMapping("/signin")
public ResponseEntity<ApiResponse> signin(
@RequestBody SigninRequest request
public ResponseEntity<ApiResponse> signin(@RequestBody SigninRequest request) {
try {
Map<String, Object> userInfo = externalAuthService.getUserInfo(request.id(), request.password());
return ResponseEntity.ok(ApiResponse.success(userInfo));
} catch (Exception e) {
return ResponseEntity.ok(ApiResponse.failure(e.getMessage()));
}
}
@Operation(summary = "Edge 패키지 목록 조회", description = "로그인 후 받은 id와 token을 사용해 외부 Edge 패키지 검색 API를 호출합니다.")
@GetMapping("/edge-search")
public ResponseEntity<ApiResponse> edgeSearch(
@RequestParam String id,
@RequestParam String token
) {
try {
String token = externalAuthService.getBearerToken(request.id(), request.password());
return ResponseEntity.ok(ApiResponse.success(token));
Map<String, Object> edgeResult = externalAuthService.getEdgePackageList(id, token);
return ResponseEntity.ok(ApiResponse.success(edgeResult));
} catch (Exception e) {
return ResponseEntity.ok(ApiResponse.failure(e.getMessage()));
}

@ -1,45 +1,62 @@
package kr.re.etri.autoflow.service;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import javax.net.ssl.*;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.Map;
@Service
public class ExternalAuthService {
private RestTemplate restTemplate;
@Value("${external.auth.signin-url}")
private String signinUrl;
private final RestTemplate restTemplate;
@Value("${external.auth.edge-search-url}")
private String edgeSearchUrl;
@PostConstruct
public void init() {
this.restTemplate = createUnsafeRestTemplate();
}
public ExternalAuthService() throws Exception {
// SSLContext 생성 (모든 인증서 허용)
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[]{new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) {}
public void checkServerTrusted(X509Certificate[] chain, String authType) {}
public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; }
}}, new java.security.SecureRandom());
/** SSL 무시용 RestTemplate 생성 */
private RestTemplate createUnsafeRestTemplate() {
try {
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; }
public void checkClientTrusted(X509Certificate[] certs, String authType) { }
public void checkServerTrusted(X509Certificate[] certs, String authType) { }
}
};
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
this.restTemplate = new RestTemplate(new SimpleClientHttpRequestFactory());
}
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true);
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
return new RestTemplate(requestFactory);
public String getBearerToken(String id, String password) {
} catch (Exception e) {
throw new RuntimeException("Failed to create unsafe RestTemplate", e);
}
}
Map<String, String> body = Map.of(
"id", id,
"password", password
);
/** Bearer 토큰 발급 */
public Map<String, Object> getUserInfo(String id, String password) {
// 요청 본문
Map<String, String> body = Map.of("id", id, "password", password);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
@ -47,19 +64,42 @@ public class ExternalAuthService {
HttpEntity<Map<String, String>> request = new HttpEntity<>(body, headers);
ResponseEntity<Map> response = restTemplate.exchange(
signinUrl,
HttpMethod.POST,
request,
Map.class
);
signinUrl, HttpMethod.POST, request, Map.class);
if (response.getStatusCode() == HttpStatus.OK) {
Map<String, Object> respBody = response.getBody();
if (respBody != null && respBody.get("data") instanceof Map dataMap) {
return (String) dataMap.get("token");
Map<String, Object> result = new HashMap<>();
result.put("id", dataMap.get("id"));
result.put("name", dataMap.get("name"));
result.put("token", dataMap.get("token"));
return result;
}
}
throw new RuntimeException("Failed to get Bearer token");
throw new RuntimeException("Failed to get user info from external server");
}
/**
* Edge API
*/
public Map<String, Object> getEdgePackageList(String id, String token) {
// URL 구성
String url = String.format("%s?sw_group=-1&sw_type=-1&searchType=&searchText=&pageNum=1&pageSize=10&auth_id=%s&user_id=",
edgeSearchUrl, id);
HttpHeaders headers = new HttpHeaders();
headers.setBearerAuth(token);
headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON));
HttpEntity<Void> request = new HttpEntity<>(headers);
ResponseEntity<Map> response = restTemplate.exchange(url, HttpMethod.GET, request, Map.class);
if (response.getStatusCode() == HttpStatus.OK) {
return response.getBody();
}
throw new RuntimeException("Failed to fetch edge package list");
}
}

@ -71,5 +71,5 @@ spring.servlet.multipart.enabled=true
#OTA??
external.auth.signin-url=https://cuuva.com:24443/api/datamanager/user/signin
external.auth.edge-search-url=https://cuuva.com:24443/api/datamanager/edge-pkg/search

Loading…
Cancel
Save