Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package clap.server.common.utils;

import lombok.RequiredArgsConstructor;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import java.util.Arrays;
import java.util.List;

@Component
@RequiredArgsConstructor
public class SpringEnvironmentHelper {

private final Environment environment;

private final String PROD = "prod";
private final String DEV = "dev";
private final String LOCAL = "local";

private final List<String> LOCAL_AND_DEV = List.of("local", "dev");

public Boolean isProdProfile() {
String[] activeProfiles = environment.getActiveProfiles();
List<String> currentProfile = Arrays.stream(activeProfiles).toList();
return currentProfile.contains(PROD);
}

public Boolean isLocalProfile() {
String[] activeProfiles = environment.getActiveProfiles();
List<String> currentProfile = Arrays.stream(activeProfiles).toList();
return currentProfile.contains(LOCAL);
}

public Boolean isDevProfile() {
String[] activeProfiles = environment.getActiveProfiles();
List<String> currentProfile = Arrays.stream(activeProfiles).toList();
return currentProfile.contains(DEV);
}

public Boolean isLocalAndDevProfile() {
String[] activeProfiles = environment.getActiveProfiles();
List<String> currentProfile = Arrays.stream(activeProfiles).toList();
return CollectionUtils.containsAny(LOCAL_AND_DEV, currentProfile);
}
}
29 changes: 29 additions & 0 deletions src/main/java/clap/server/config/aop/ApiBlockingAspect.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package clap.server.config.aop;

import clap.server.common.utils.SpringEnvironmentHelper;
import clap.server.exception.ApplicationException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

import static clap.server.exception.code.GlobalErrorCode.BLOCKED_API;

@Aspect
@Component
@Slf4j
@RequiredArgsConstructor
public class ApiBlockingAspect {

private final SpringEnvironmentHelper springEnvironmentHelper;

@Around("@annotation(clap.server.common.annotation.swagger.DevelopOnlyApi)")
public Object checkApiAcceptingCondition(ProceedingJoinPoint joinPoint) throws Throwable {
if (springEnvironmentHelper.isProdProfile()) {
throw new ApplicationException(BLOCKED_API) ;
}
return joinPoint.proceed();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public enum GlobalErrorCode implements BaseErrorCode {
METHOD_ARGUMENT_NOT_VALID(HttpStatus.BAD_REQUEST, "COMMON_002", "올바르지 않은 요청입니다."),
METHOD_NOT_ALLOWED(HttpStatus.METHOD_NOT_ALLOWED, "COMMON_005", "지원하지 않은 Http Method 입니다."),
INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "COMMON_006", "서버 에러가 발생했습니다."),
BLOCKED_API(HttpStatus.METHOD_NOT_ALLOWED, "COMMON_007", "운영 환경에서 사용할 수 없는 API 입니다."),
;

private final HttpStatus httpStatus;
Expand Down
3 changes: 2 additions & 1 deletion src/main/resources/swagger.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,5 @@ springdoc:
path: /swagger/v3/api-docs

---
spring.config.activate.on-profile: prod
spring.config.activate.on-profile: prod
swagger.server.url: ${SWAGGER_SERVER_URL:http://localhost:8080}