토큰과 헤더명은 PTL_PROPERTY {@code Portal / internal.api.header-name}, + * {@code Portal / internal.api.token}을 사용한다. admin은 토큰을 생성하지 않고 읽기 전용으로 + * 검증하므로, portal이 먼저 기동되어 토큰을 생성해야 한다.
+ */ +@Component +@RequiredArgsConstructor +@Slf4j +public class InternalApiTokenInterceptor implements HandlerInterceptor { + + private final InternalApiTokenService internalApiTokenService; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException { + String headerName = internalApiTokenService.findHeaderName(); + String presentedToken = request.getHeader(headerName); + + if (!internalApiTokenService.matchesReadOnly(presentedToken)) { + log.warn("Invalid internal API token. URI: {}, header: {}", request.getRequestURI(), headerName); + sendErrorResponse(response, HttpServletResponse.SC_UNAUTHORIZED, "Internal API token is invalid"); + return false; + } + return true; + } + + private void sendErrorResponse(HttpServletResponse response, int status, String message) throws IOException { + response.setStatus(status); + response.setContentType("application/json;charset=UTF-8"); + response.getWriter().write(String.format("{\"error\": \"%s\"}", message)); + } +} diff --git a/src/main/java/com/eactive/eai/rms/onl/apim/approval/user/PortalUserApprovalListener.java b/src/main/java/com/eactive/eai/rms/onl/apim/approval/user/PortalUserApprovalListener.java index 210c823..f152071 100644 --- a/src/main/java/com/eactive/eai/rms/onl/apim/approval/user/PortalUserApprovalListener.java +++ b/src/main/java/com/eactive/eai/rms/onl/apim/approval/user/PortalUserApprovalListener.java @@ -6,7 +6,6 @@ import com.eactive.apim.portal.approval.statemachine.listener.ApprovalListener; import com.eactive.apim.portal.portalorg.entity.PortalOrg; import com.eactive.apim.portal.portalorg.entity.PortalOrgEnums.ApprovalStatus; import com.eactive.apim.portal.portalorg.entity.PortalOrgEnums.OrgStatus; -import com.eactive.apim.portal.portalproperty.service.PortalPropertyService; import com.eactive.apim.portal.portaluser.entity.PortalUser; import com.eactive.apim.portal.portaluser.entity.PortalUserEnums; import com.eactive.apim.portal.template.entity.MessageCode; @@ -14,27 +13,15 @@ import com.eactive.apim.portal.template.service.MessageRecipient; import com.eactive.apim.portal.template.service.MessageSendService; import com.eactive.eai.rms.data.entity.onl.apim.portalorg.PortalOrgService; import com.eactive.eai.rms.data.entity.onl.apim.portaluser.PortalUserService; -import com.eactive.eai.rms.onl.apim.portalorg.PortalOrgUI; -import com.eactive.eai.rms.onl.apim.portalorg.PortalOrgUIMapper; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.Map; import lombok.RequiredArgsConstructor; -import org.apache.http.client.HttpClient; -import org.apache.http.client.config.RequestConfig; -import org.apache.http.impl.client.HttpClientBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.client.RestTemplate; @Service @Transactional @@ -42,36 +29,9 @@ import org.springframework.web.client.RestTemplate; public class PortalUserApprovalListener implements ApprovalListener { private static final Logger logger = LoggerFactory.getLogger(PortalUserApprovalListener.class); - private static final String PORTAL_PROPERTY_GROUP = "Portal"; - private final PortalPropertyService portalPropertyService; private final PortalOrgService portalOrgService; private final PortalUserService portalUserService; private final MessageSendService messageSendService; - private final PortalOrgUIMapper portalOrgUIMapper; - - public static RestTemplate createRestTemplateWithTimeout(int connectTimeout) { - - RequestConfig requestConfig = RequestConfig.custom() - .setConnectionRequestTimeout(connectTimeout) - .setConnectTimeout(connectTimeout) - .setSocketTimeout(connectTimeout) - .build(); - - HttpClient httpClient = - HttpClientBuilder.create() - .setMaxConnTotal(50) - .setMaxConnPerRoute(20) - .setDefaultRequestConfig(requestConfig) - .build(); - - HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); - factory.setHttpClient(httpClient); - - RestTemplate restTemplate = new RestTemplate(); - restTemplate.setRequestFactory(factory); - - return restTemplate; - } @Override public void execute(Approval approval, Map