A 프로젝트에서 B 프로젝트의 api를 호출하여 사용하고 있을 때,
B는 A에게 HTTP 상태코드를 전달하려고 한다. 그 방법을 알아봅시다🔥
요구조건
- A에서 B의 api를 호출합니다.
- A에서 B를 호출할 때 A에 헤더에 SecretKey를 넣습니다.
- B는 인터셉터를 사용하여 헤더의 SecretKey 값이 유효한지 체크합니다.
- 값이 유효한 경우 😊
api 호출을 가능하게 합니다.
- 값이 유효하지 않은 경우 😢
api 호출을 불가하게 하고 HTTP 상태코드를 return 합니다.
A 프로젝트의 호출부
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
// ... 일부 코드 생략
public void getApiResponse() {
String secretKey = "secretKey_example";
String url = "https://short-coding.tistory.com";
HttpHeaders headers = new HttpHeaders();
headersAddSecretKey(headers, secretKey);
ExampleDto exampleDto = new ExampleDto();
HttpEntity<ExampleDto> requestEntity = new HttpEntity<>(exampleDto, headers);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<CommonResponse> response = restTemplate.exchange(url, HttpMethod.POST,
requestEntity, CommonResponse.class);
}
public void headersAddSecretKey(HttpHeaders headers, String secretKey) {
String headerName = "SecretKey";
headers.add(headerName, secretKey);
}
B프로젝트의 인터셉터
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AuthInterceptor implements HandlerInterceptor {
private final Logger log = LoggerFactory.getLogger(AuthInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String InterceptorSecretKey = "secretKey_example";
String headerName = "SecretKey";
String secretKey = request.getHeader(headerName);
if (secretKey == null || secretKey.isEmpty()) {
log.error("secret key is null");
response.sendError(HttpStatus.UNAUTHORIZED.value(), HttpStatus.UNAUTHORIZED.toString());
return false;
}
if (!InterceptorSecretKey.equals(secretKey)) {
log.error("secret key is diffirent");
response.sendError(HttpStatus.UNAUTHORIZED.value(), HttpStatus.UNAUTHORIZED.toString());
return false;
}
return HandlerInterceptor.super.preHandle(request, response, handler);
}
}
B프로젝트의 WebMvcConfiguration
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer{
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new AuthInterceptor()).addPathPatterns("/api/**");
}
}
'개인 지식 > Spring' 카테고리의 다른 글
스프링 부트 + 타임리프 다국어 메일 보내기(다국어 부분)🔥 (0) | 2023.01.14 |
---|