diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/v1/controller/ItemController.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/v1/controller/ItemController.java
index 3405a4c12f54e3786db4239766e2f3ef7b25175b..3c26be16692931a94e6db2477a28df086d426a31 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/v1/controller/ItemController.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/v1/controller/ItemController.java
@@ -8,7 +8,7 @@ import com.ctrip.framework.apollo.core.utils.StringUtils;
import com.ctrip.framework.apollo.openapi.dto.OpenItemDTO;
import com.ctrip.framework.apollo.openapi.util.OpenApiBeanUtils;
import com.ctrip.framework.apollo.portal.service.ItemService;
-import com.ctrip.framework.apollo.portal.extend.UserService;
+import com.ctrip.framework.apollo.portal.spi.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/v1/controller/ReleaseController.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/v1/controller/ReleaseController.java
index 72e64490cce38bf716fffc7b090d59f37230c7da..2c58bc8535fc4f4ea8813548255eb91fdb8462db 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/v1/controller/ReleaseController.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/v1/controller/ReleaseController.java
@@ -10,7 +10,7 @@ import com.ctrip.framework.apollo.openapi.dto.OpenReleaseDTO;
import com.ctrip.framework.apollo.openapi.util.OpenApiBeanUtils;
import com.ctrip.framework.apollo.portal.entity.model.NamespaceReleaseModel;
import com.ctrip.framework.apollo.portal.service.ReleaseService;
-import com.ctrip.framework.apollo.portal.extend.UserService;
+import com.ctrip.framework.apollo.portal.spi.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/components/PermissionValidator.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/components/PermissionValidator.java
index 01f633157f4df05ed985e321b941f509f2b8d5a5..9efefe757142550737d2b1387e4ecdbfeec7699e 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/components/PermissionValidator.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/components/PermissionValidator.java
@@ -2,7 +2,7 @@ package com.ctrip.framework.apollo.portal.components;
import com.ctrip.framework.apollo.common.entity.AppNamespace;
import com.ctrip.framework.apollo.portal.constant.PermissionType;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.service.RolePermissionService;
import com.ctrip.framework.apollo.portal.util.RoleUtils;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/AppController.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/AppController.java
index 28f511cee1299c01b7ce557aefb410f51d82833f..49d224a9dd3108c9c7906dc1a541ac8ef978313d 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/AppController.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/AppController.java
@@ -15,7 +15,7 @@ import com.ctrip.framework.apollo.portal.entity.po.UserInfo;
import com.ctrip.framework.apollo.portal.entity.vo.EnvClusterInfo;
import com.ctrip.framework.apollo.portal.listener.AppCreationEvent;
import com.ctrip.framework.apollo.portal.service.AppService;
-import com.ctrip.framework.apollo.portal.extend.UserService;
+import com.ctrip.framework.apollo.portal.spi.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ClusterController.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ClusterController.java
index 993c13cbb69a467378ceedf8c9be0a876e9b95d0..aef933e0ece9fafff1b2f58b82e4ebeb65e29633 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ClusterController.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ClusterController.java
@@ -5,7 +5,7 @@ import com.ctrip.framework.apollo.common.exception.BadRequestException;
import com.ctrip.framework.apollo.common.utils.InputValidator;
import com.ctrip.framework.apollo.common.utils.RequestPrecondition;
import com.ctrip.framework.apollo.core.enums.Env;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.service.ClusterService;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ConsumerController.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ConsumerController.java
index 135e859e6b42e3a3d941021944fe26fbedfc2996..302e187afa1f16cc43a364b4e06a2edd7264160d 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ConsumerController.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ConsumerController.java
@@ -2,7 +2,7 @@ package com.ctrip.framework.apollo.portal.controller;
import com.ctrip.framework.apollo.openapi.entity.ConsumerToken;
import com.ctrip.framework.apollo.openapi.service.ConsumerService;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ItemController.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ItemController.java
index 29a647d95c09921bf093b0f73e1cc6af4fa44e8f..d8e9cf7f6e3987ead4e0b5f6440226d6290c81ad 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ItemController.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ItemController.java
@@ -4,7 +4,7 @@ import com.ctrip.framework.apollo.common.dto.ItemDTO;
import com.ctrip.framework.apollo.common.exception.BadRequestException;
import com.ctrip.framework.apollo.core.enums.Env;
import com.ctrip.framework.apollo.core.utils.StringUtils;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.entity.model.NamespaceSyncModel;
import com.ctrip.framework.apollo.portal.entity.model.NamespaceTextModel;
import com.ctrip.framework.apollo.portal.entity.vo.ItemDiffs;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/NamespaceController.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/NamespaceController.java
index 46479de9cc2c16e3ab876b2053de588df10155a5..e2649cf773ae221c25f32cbdf4c8c6ac51be9f30 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/NamespaceController.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/NamespaceController.java
@@ -11,7 +11,7 @@ import com.ctrip.framework.apollo.common.utils.RequestPrecondition;
import com.ctrip.framework.apollo.core.enums.ConfigFileFormat;
import com.ctrip.framework.apollo.core.enums.Env;
import com.ctrip.framework.apollo.core.utils.StringUtils;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.entity.model.NamespaceCreationModel;
import com.ctrip.framework.apollo.portal.constant.RoleType;
import com.ctrip.framework.apollo.portal.entity.vo.NamespaceVO;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/PermissionController.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/PermissionController.java
index e7c2c1f893ff2dabdca7dd37944bb46cc09868f8..e753b65803dd61012d39b85b48ebcc7c5b752b3d 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/PermissionController.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/PermissionController.java
@@ -4,14 +4,14 @@ import com.google.common.collect.Sets;
import com.ctrip.framework.apollo.common.exception.BadRequestException;
import com.ctrip.framework.apollo.common.utils.RequestPrecondition;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.constant.RoleType;
import com.ctrip.framework.apollo.portal.entity.po.UserInfo;
import com.ctrip.framework.apollo.portal.entity.vo.AppRolesAssignedUsers;
import com.ctrip.framework.apollo.portal.entity.vo.NamespaceRolesAssignedUsers;
import com.ctrip.framework.apollo.portal.entity.vo.PermissionCondition;
import com.ctrip.framework.apollo.portal.service.RolePermissionService;
-import com.ctrip.framework.apollo.portal.extend.UserService;
+import com.ctrip.framework.apollo.portal.spi.UserService;
import com.ctrip.framework.apollo.portal.util.RoleUtils;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ServerConfigController.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ServerConfigController.java
index 9d8d96a4e989bc7fdfa3fd914e008155bd1c2d2c..4564635b9b4b63dd30bc97452136c19fe54bc308 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ServerConfigController.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ServerConfigController.java
@@ -3,7 +3,7 @@ package com.ctrip.framework.apollo.portal.controller;
import com.ctrip.framework.apollo.common.utils.BeanUtils;
import com.ctrip.framework.apollo.common.utils.RequestPrecondition;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.entity.po.ServerConfig;
import com.ctrip.framework.apollo.portal.repository.ServerConfigRepository;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/SsoHeartbeatController.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/SsoHeartbeatController.java
index 15d2829e0da4d1ea8ab24cb89e6e7980d6466051..28e64b1dabcbef73cf485104d87aa665479c9474 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/SsoHeartbeatController.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/SsoHeartbeatController.java
@@ -1,6 +1,6 @@
package com.ctrip.framework.apollo.portal.controller;
-import com.ctrip.framework.apollo.portal.extend.SsoHeartbeatHandler;
+import com.ctrip.framework.apollo.portal.spi.SsoHeartbeatHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/UserInfoController.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/UserInfoController.java
index 2137570a3f9d3d55696480baf9227d9fc3ebe555..2a0273bd7cf9e9de347b4d71aa1b710ca5e2ccb6 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/UserInfoController.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/UserInfoController.java
@@ -1,9 +1,9 @@
package com.ctrip.framework.apollo.portal.controller;
-import com.ctrip.framework.apollo.portal.extend.LogoutHandler;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.LogoutHandler;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.entity.po.UserInfo;
-import com.ctrip.framework.apollo.portal.extend.UserService;
+import com.ctrip.framework.apollo.portal.spi.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/package-info.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/package-info.java
deleted file mode 100644
index f7517f84582828633a6f0313814dc939fbbd6229..0000000000000000000000000000000000000000
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/package-info.java
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * The interfaces under the extend package, each company should own to implement.
- * Other companies can ignore the implementation under the Ctrip package.
- * In addition, we provide the default implementation of the interface under the default package.
- *
- */
-package com.ctrip.framework.apollo.portal.extend;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppNamespaceService.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppNamespaceService.java
index 4e926ae1f50cc635d84b8372bf9414c3d318f326..8320b891d56bfbfb9bbb7b2196f4dfad733c2fd3 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppNamespaceService.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppNamespaceService.java
@@ -5,7 +5,7 @@ import com.ctrip.framework.apollo.common.exception.BadRequestException;
import com.ctrip.framework.apollo.common.exception.ServiceException;
import com.ctrip.framework.apollo.core.ConfigConsts;
import com.ctrip.framework.apollo.core.enums.ConfigFileFormat;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.repository.AppNamespaceRepository;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppService.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppService.java
index 568cee64a4491bd3a5ffa1f5c90156402565180b..dfe76ababf941b148c329b3ceea99f9e46cbfadb 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppService.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppService.java
@@ -9,7 +9,7 @@ import com.ctrip.framework.apollo.common.utils.BeanUtils;
import com.ctrip.framework.apollo.common.utils.ExceptionUtils;
import com.ctrip.framework.apollo.core.enums.Env;
import com.ctrip.framework.apollo.portal.api.AdminServiceAPI;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.constant.CatEventType;
import com.ctrip.framework.apollo.portal.entity.vo.EnvClusterInfo;
import com.ctrip.framework.apollo.portal.repository.AppRepository;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ClusterService.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ClusterService.java
index c2798c167af811b3bc5d99e643c16cb45e1e461d..70413e5cee4d613c5ec0729ef3cda8f8b49db9d5 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ClusterService.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ClusterService.java
@@ -4,7 +4,7 @@ import com.ctrip.framework.apollo.common.dto.ClusterDTO;
import com.ctrip.framework.apollo.common.exception.BadRequestException;
import com.ctrip.framework.apollo.core.enums.Env;
import com.ctrip.framework.apollo.portal.api.AdminServiceAPI;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.constant.CatEventType;
import com.dianping.cat.Cat;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/FavoriteService.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/FavoriteService.java
index 627678e12f88229ab7bbb459972b01b5ec71109a..5c9b3a374669c81265eb2c953ca1196709ff0503 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/FavoriteService.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/FavoriteService.java
@@ -1,8 +1,8 @@
package com.ctrip.framework.apollo.portal.service;
import com.ctrip.framework.apollo.common.exception.BadRequestException;
-import com.ctrip.framework.apollo.portal.extend.UserService;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserService;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.entity.po.Favorite;
import com.ctrip.framework.apollo.portal.entity.po.UserInfo;
import com.ctrip.framework.apollo.portal.repository.FavoriteRepository;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ItemService.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ItemService.java
index 96dc6593fb4fdd1a67d0559d851803ae7eef36f4..0363e8f0e67bbb61f91d4838c4440e1b9290de10 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ItemService.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ItemService.java
@@ -10,7 +10,7 @@ import com.ctrip.framework.apollo.core.enums.ConfigFileFormat;
import com.ctrip.framework.apollo.core.enums.Env;
import com.ctrip.framework.apollo.core.utils.StringUtils;
import com.ctrip.framework.apollo.portal.api.AdminServiceAPI;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.constant.CatEventType;
import com.ctrip.framework.apollo.portal.entity.model.NamespaceTextModel;
import com.ctrip.framework.apollo.portal.entity.vo.ItemDiffs;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/NamespaceBranchService.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/NamespaceBranchService.java
index 5d6efa0d1e6632432a63a67138d8dde7fc4b4f5f..38712ccc1d4e484488fab7d6bdce50cbe58228db 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/NamespaceBranchService.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/NamespaceBranchService.java
@@ -9,7 +9,7 @@ import com.ctrip.framework.apollo.common.exception.BadRequestException;
import com.ctrip.framework.apollo.core.enums.Env;
import com.ctrip.framework.apollo.portal.api.AdminServiceAPI;
import com.ctrip.framework.apollo.portal.components.PermissionValidator;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.components.ItemsComparator;
import com.ctrip.framework.apollo.portal.constant.CatEventType;
import com.ctrip.framework.apollo.portal.entity.vo.NamespaceVO;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/NamespaceService.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/NamespaceService.java
index a4ed20c85ecc14438e734b7486c7891518981c43..9026a31dfe977c9b7894c7ee61deb4b2bbe91592 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/NamespaceService.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/NamespaceService.java
@@ -13,7 +13,7 @@ import com.ctrip.framework.apollo.core.enums.ConfigFileFormat;
import com.ctrip.framework.apollo.core.enums.Env;
import com.ctrip.framework.apollo.core.utils.StringUtils;
import com.ctrip.framework.apollo.portal.api.AdminServiceAPI;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.constant.CatEventType;
import com.ctrip.framework.apollo.portal.entity.vo.NamespaceVO;
import com.dianping.cat.Cat;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ReleaseService.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ReleaseService.java
index ad49310c0aa1141760b0a13c6cb78f1951088f21..1978e9a274aeb70ad34335acc1f48ba354cd9a72 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ReleaseService.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ReleaseService.java
@@ -9,7 +9,7 @@ import com.ctrip.framework.apollo.common.dto.ReleaseDTO;
import com.ctrip.framework.apollo.core.enums.Env;
import com.ctrip.framework.apollo.core.utils.StringUtils;
import com.ctrip.framework.apollo.portal.api.AdminServiceAPI;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.constant.CatEventType;
import com.ctrip.framework.apollo.portal.entity.model.NamespaceReleaseModel;
import com.ctrip.framework.apollo.portal.entity.vo.KVEntity;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/RoleInitializationService.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/RoleInitializationService.java
index 154ce22acbd81e5314534f5ac5e99592036845e9..8837e391e0da6e811e4249c6ff7925ac02cc5907 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/RoleInitializationService.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/RoleInitializationService.java
@@ -6,7 +6,7 @@ import com.google.common.collect.Sets;
import com.ctrip.framework.apollo.common.entity.App;
import com.ctrip.framework.apollo.core.ConfigConsts;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.constant.PermissionType;
import com.ctrip.framework.apollo.portal.constant.RoleType;
import com.ctrip.framework.apollo.portal.entity.po.Permission;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/LogoutHandler.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/LogoutHandler.java
similarity index 80%
rename from apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/LogoutHandler.java
rename to apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/LogoutHandler.java
index 8a7e45dd3d4a508f235fd25c70f23cdc539c0648..d7deae9fdf12f83cca3465ab63c439fda04d56ab 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/LogoutHandler.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/LogoutHandler.java
@@ -1,4 +1,4 @@
-package com.ctrip.framework.apollo.portal.extend;
+package com.ctrip.framework.apollo.portal.spi;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/SsoHeartbeatHandler.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/SsoHeartbeatHandler.java
similarity index 83%
rename from apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/SsoHeartbeatHandler.java
rename to apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/SsoHeartbeatHandler.java
index fa2c0ae04692b8b1aba259c1aa46491072d79016..8146c81df54cba0ec77aec969b82d158301f7234 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/SsoHeartbeatHandler.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/SsoHeartbeatHandler.java
@@ -1,4 +1,4 @@
-package com.ctrip.framework.apollo.portal.extend;
+package com.ctrip.framework.apollo.portal.spi;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/UserInfoHolder.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/UserInfoHolder.java
similarity index 82%
rename from apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/UserInfoHolder.java
rename to apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/UserInfoHolder.java
index a8edc98d6602aa6deb71b9c2759cdddb29e41622..3de2bc209a057b8301a60e8cab6c40eceeaabdd1 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/UserInfoHolder.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/UserInfoHolder.java
@@ -1,4 +1,4 @@
-package com.ctrip.framework.apollo.portal.extend;
+package com.ctrip.framework.apollo.portal.spi;
import com.ctrip.framework.apollo.portal.entity.po.UserInfo;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/UserService.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/UserService.java
similarity index 86%
rename from apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/UserService.java
rename to apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/UserService.java
index 99bddbf78db217a05ba3b9b6735939e8e6bfd747..cce2b306f368380325f2648316d6eaf5d85f3999 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/UserService.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/UserService.java
@@ -1,4 +1,4 @@
-package com.ctrip.framework.apollo.portal.extend;
+package com.ctrip.framework.apollo.portal.spi;
import com.ctrip.framework.apollo.portal.entity.po.UserInfo;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/configuration/AuthConfiguration.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/configuration/AuthConfiguration.java
similarity index 88%
rename from apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/configuration/AuthConfiguration.java
rename to apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/configuration/AuthConfiguration.java
index c1a5d53c235e3f70b67b73f083d0e1fc5ef53b78..daf6cde9952d213957c79283addf277f3b5b9f86 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/configuration/AuthConfiguration.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/configuration/AuthConfiguration.java
@@ -1,23 +1,23 @@
-package com.ctrip.framework.apollo.portal.extend.configuration;
+package com.ctrip.framework.apollo.portal.spi.configuration;
import com.google.common.collect.Maps;
import com.ctrip.framework.apollo.openapi.filter.ConsumerAuthenticationFilter;
import com.ctrip.framework.apollo.openapi.util.ConsumerAuditUtil;
import com.ctrip.framework.apollo.openapi.util.ConsumerAuthUtil;
-import com.ctrip.framework.apollo.portal.extend.LogoutHandler;
-import com.ctrip.framework.apollo.portal.extend.SsoHeartbeatHandler;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
-import com.ctrip.framework.apollo.portal.extend.ctrip.CtripLogoutHandler;
-import com.ctrip.framework.apollo.portal.extend.ctrip.CtripSsoHeartbeatHandler;
-import com.ctrip.framework.apollo.portal.extend.ctrip.CtripUserInfoHolder;
-import com.ctrip.framework.apollo.portal.extend.ctrip.CtripUserService;
-import com.ctrip.framework.apollo.portal.extend.defaultimpl.DefaultLogoutHandler;
-import com.ctrip.framework.apollo.portal.extend.defaultimpl.DefaultSsoHeartbeatHandler;
-import com.ctrip.framework.apollo.portal.extend.defaultimpl.DefaultUserInfoHolder;
-import com.ctrip.framework.apollo.portal.extend.defaultimpl.DefaultUserService;
+import com.ctrip.framework.apollo.portal.spi.LogoutHandler;
+import com.ctrip.framework.apollo.portal.spi.SsoHeartbeatHandler;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.ctrip.CtripLogoutHandler;
+import com.ctrip.framework.apollo.portal.spi.ctrip.CtripSsoHeartbeatHandler;
+import com.ctrip.framework.apollo.portal.spi.ctrip.CtripUserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.ctrip.CtripUserService;
+import com.ctrip.framework.apollo.portal.spi.defaultimpl.DefaultLogoutHandler;
+import com.ctrip.framework.apollo.portal.spi.defaultimpl.DefaultSsoHeartbeatHandler;
+import com.ctrip.framework.apollo.portal.spi.defaultimpl.DefaultUserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.defaultimpl.DefaultUserService;
import com.ctrip.framework.apollo.portal.service.ServerConfigService;
-import com.ctrip.framework.apollo.portal.extend.UserService;
+import com.ctrip.framework.apollo.portal.spi.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/BizLoggingCustomizer.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/BizLoggingCustomizer.java
similarity index 95%
rename from apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/BizLoggingCustomizer.java
rename to apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/BizLoggingCustomizer.java
index 66bbd8b302a842defb7ccac936ad271fea205c48..5660ff8c9b3c5fbb8b33607b6511a5eca402d56a 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/BizLoggingCustomizer.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/BizLoggingCustomizer.java
@@ -1,4 +1,4 @@
-package com.ctrip.framework.apollo.portal.extend.ctrip;
+package com.ctrip.framework.apollo.portal.spi.ctrip;
import com.ctrip.framework.apollo.common.customize.LoggingCustomizer;
import com.ctrip.framework.apollo.portal.service.ServerConfigService;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/CtripLogoutHandler.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/CtripLogoutHandler.java
similarity index 91%
rename from apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/CtripLogoutHandler.java
rename to apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/CtripLogoutHandler.java
index 9521b0668bf9d5d096a45c08bf889dbc13f8c25e..0a5d1e3c777eb14415d65cde0d37ae1d48e4a987 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/CtripLogoutHandler.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/CtripLogoutHandler.java
@@ -1,6 +1,6 @@
-package com.ctrip.framework.apollo.portal.extend.ctrip;
+package com.ctrip.framework.apollo.portal.spi.ctrip;
-import com.ctrip.framework.apollo.portal.extend.LogoutHandler;
+import com.ctrip.framework.apollo.portal.spi.LogoutHandler;
import com.ctrip.framework.apollo.portal.service.ServerConfigService;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/CtripSsoHeartbeatHandler.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/CtripSsoHeartbeatHandler.java
similarity index 78%
rename from apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/CtripSsoHeartbeatHandler.java
rename to apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/CtripSsoHeartbeatHandler.java
index 27599559c072214920ac865d2b2de743e52c43e9..d363636ba76645bcafdeb648c5a3d3f98bb07807 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/CtripSsoHeartbeatHandler.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/CtripSsoHeartbeatHandler.java
@@ -1,6 +1,6 @@
-package com.ctrip.framework.apollo.portal.extend.ctrip;
+package com.ctrip.framework.apollo.portal.spi.ctrip;
-import com.ctrip.framework.apollo.portal.extend.SsoHeartbeatHandler;
+import com.ctrip.framework.apollo.portal.spi.SsoHeartbeatHandler;
import java.io.IOException;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/CtripUserInfoHolder.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/CtripUserInfoHolder.java
similarity index 91%
rename from apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/CtripUserInfoHolder.java
rename to apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/CtripUserInfoHolder.java
index 5d9a1eb6f04b3984be2e4e695536c608b255a803..ab39fafc45b11ac1b8d67427a3dce3d629fb1921 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/CtripUserInfoHolder.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/CtripUserInfoHolder.java
@@ -1,6 +1,6 @@
-package com.ctrip.framework.apollo.portal.extend.ctrip;
+package com.ctrip.framework.apollo.portal.spi.ctrip;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.entity.po.UserInfo;
import java.lang.reflect.Method;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/CtripUserService.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/CtripUserService.java
similarity index 98%
rename from apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/CtripUserService.java
rename to apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/CtripUserService.java
index 43f26bdb9557c1b55794bea977498ecd1bc69f4f..e8fb0e2ae885e3e0455c695785b164f08d4d73f8 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/CtripUserService.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/CtripUserService.java
@@ -1,4 +1,4 @@
-package com.ctrip.framework.apollo.portal.extend.ctrip;
+package com.ctrip.framework.apollo.portal.spi.ctrip;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
@@ -6,7 +6,7 @@ import com.google.common.collect.Maps;
import com.ctrip.framework.apollo.portal.entity.po.UserInfo;
import com.ctrip.framework.apollo.portal.service.ServerConfigService;
-import com.ctrip.framework.apollo.portal.extend.UserService;
+import com.ctrip.framework.apollo.portal.spi.UserService;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpEntity;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/WebContextConfiguration.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/WebContextConfiguration.java
similarity index 90%
rename from apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/WebContextConfiguration.java
rename to apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/WebContextConfiguration.java
index adb111a251462e73799d3fae3e94a591e81b16ce..98498ad0f6414da754893b483039b7e088220377 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/WebContextConfiguration.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/WebContextConfiguration.java
@@ -1,9 +1,9 @@
-package com.ctrip.framework.apollo.portal.extend.ctrip;
+package com.ctrip.framework.apollo.portal.spi.ctrip;
import com.google.common.base.Strings;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
-import com.ctrip.framework.apollo.portal.extend.ctrip.filters.RecordAccessUserFilter;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.ctrip.filters.RecordAccessUserFilter;
import com.ctrip.framework.apollo.portal.service.ServerConfigService;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/filters/RecordAccessUserFilter.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/filters/RecordAccessUserFilter.java
similarity index 88%
rename from apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/filters/RecordAccessUserFilter.java
rename to apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/filters/RecordAccessUserFilter.java
index c8b85649be6519ad900452574dbe5895a9e99cb6..edac3965219af98703d4da8181e95eecd6f1aa16 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/ctrip/filters/RecordAccessUserFilter.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/ctrip/filters/RecordAccessUserFilter.java
@@ -1,6 +1,6 @@
-package com.ctrip.framework.apollo.portal.extend.ctrip.filters;
+package com.ctrip.framework.apollo.portal.spi.ctrip.filters;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.constant.CatEventType;
import com.dianping.cat.Cat;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/defaultimpl/DefaultLogoutHandler.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/defaultimpl/DefaultLogoutHandler.java
similarity index 76%
rename from apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/defaultimpl/DefaultLogoutHandler.java
rename to apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/defaultimpl/DefaultLogoutHandler.java
index c90bb08f2024cec17e10670f10d6fa88ec9bcef2..d8bfb907668af70caebd5cbed9ca1d662d84b230 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/defaultimpl/DefaultLogoutHandler.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/defaultimpl/DefaultLogoutHandler.java
@@ -1,6 +1,6 @@
-package com.ctrip.framework.apollo.portal.extend.defaultimpl;
+package com.ctrip.framework.apollo.portal.spi.defaultimpl;
-import com.ctrip.framework.apollo.portal.extend.LogoutHandler;
+import com.ctrip.framework.apollo.portal.spi.LogoutHandler;
import java.io.IOException;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/defaultimpl/DefaultSsoHeartbeatHandler.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/defaultimpl/DefaultSsoHeartbeatHandler.java
similarity index 77%
rename from apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/defaultimpl/DefaultSsoHeartbeatHandler.java
rename to apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/defaultimpl/DefaultSsoHeartbeatHandler.java
index 01c18979332cb73c59bf8b673d5a04493723129a..0324d85f3cf96e4fb0b62431f27876b4df36c782 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/defaultimpl/DefaultSsoHeartbeatHandler.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/defaultimpl/DefaultSsoHeartbeatHandler.java
@@ -1,6 +1,6 @@
-package com.ctrip.framework.apollo.portal.extend.defaultimpl;
+package com.ctrip.framework.apollo.portal.spi.defaultimpl;
-import com.ctrip.framework.apollo.portal.extend.SsoHeartbeatHandler;
+import com.ctrip.framework.apollo.portal.spi.SsoHeartbeatHandler;
import java.io.IOException;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/defaultimpl/DefaultUserInfoHolder.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/defaultimpl/DefaultUserInfoHolder.java
similarity index 74%
rename from apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/defaultimpl/DefaultUserInfoHolder.java
rename to apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/defaultimpl/DefaultUserInfoHolder.java
index 97d2e4724e06ee9cfd30f1b55e655824d5e019b9..945d492e88e0ffb448213547e7800068004c8ac9 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/defaultimpl/DefaultUserInfoHolder.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/defaultimpl/DefaultUserInfoHolder.java
@@ -1,6 +1,6 @@
-package com.ctrip.framework.apollo.portal.extend.defaultimpl;
+package com.ctrip.framework.apollo.portal.spi.defaultimpl;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.entity.po.UserInfo;
/**
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/defaultimpl/DefaultUserService.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/defaultimpl/DefaultUserService.java
similarity index 88%
rename from apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/defaultimpl/DefaultUserService.java
rename to apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/defaultimpl/DefaultUserService.java
index 6d539054612d50e5ab5e7f02109a6fe9e3e24dae..55a5e19d372a27895215384b89ff5ed65cdc2c28 100644
--- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/extend/defaultimpl/DefaultUserService.java
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/defaultimpl/DefaultUserService.java
@@ -1,9 +1,9 @@
-package com.ctrip.framework.apollo.portal.extend.defaultimpl;
+package com.ctrip.framework.apollo.portal.spi.defaultimpl;
import com.google.common.collect.Lists;
import com.ctrip.framework.apollo.portal.entity.po.UserInfo;
-import com.ctrip.framework.apollo.portal.extend.UserService;
+import com.ctrip.framework.apollo.portal.spi.UserService;
import java.util.Arrays;
import java.util.List;
diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/package-info.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/package-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..1b9d04eebce837294f2c2766515f711b97ba470d
--- /dev/null
+++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/package-info.java
@@ -0,0 +1,10 @@
+/**
+ * This package defines common interfaces so that each company could provide their own implementations.
+ * Currently we provide 2 implementations: Ctrip and Default.
+ * Ctrip implementation will be activated only when spring.profiles.active = ctrip.
+ * So if spring.profiles.active is not ctrip, the default implementation will be activated.
+ * You may refer com.ctrip.framework.apollo.portal.spi.configuration.AuthConfiguration when providing your own implementation.
+ *
+ * @see com.ctrip.framework.apollo.portal.spi.configuration.AuthConfiguration
+ */
+package com.ctrip.framework.apollo.portal.spi;
diff --git a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/ServiceExceptionTest.java b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/ServiceExceptionTest.java
index 07e4b97e08102d54966a3118aa585602664554d7..638164e016f63a528b2446eb4c6881f34727d9a7 100644
--- a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/ServiceExceptionTest.java
+++ b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/ServiceExceptionTest.java
@@ -21,7 +21,7 @@ import org.springframework.web.client.HttpStatusCodeException;
import com.ctrip.framework.apollo.common.entity.App;
import com.ctrip.framework.apollo.common.exception.ServiceException;
import com.ctrip.framework.apollo.portal.controller.AppController;
-import com.ctrip.framework.apollo.portal.extend.UserService;
+import com.ctrip.framework.apollo.portal.spi.UserService;
import com.google.gson.Gson;
diff --git a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/controller/ConsumerControllerTest.java b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/controller/ConsumerControllerTest.java
index 5b5471877aa8e0f3cbe977f1da76deec9ca923d8..4f9ffe1a4d0ef194393242b71d20f18f6e3804f9 100644
--- a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/controller/ConsumerControllerTest.java
+++ b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/controller/ConsumerControllerTest.java
@@ -2,7 +2,7 @@ package com.ctrip.framework.apollo.portal.controller;
import com.ctrip.framework.apollo.openapi.entity.ConsumerToken;
import com.ctrip.framework.apollo.openapi.service.ConsumerService;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.entity.po.UserInfo;
import org.junit.Before;
diff --git a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/ConfigServiceTest.java b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/ConfigServiceTest.java
index c05110158d397816cbf3dc6ed522b7f3002381f2..08de344566d6b1e66b0a193d7add52420ab998ec 100644
--- a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/ConfigServiceTest.java
+++ b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/ConfigServiceTest.java
@@ -7,7 +7,7 @@ import com.ctrip.framework.apollo.common.dto.NamespaceDTO;
import com.ctrip.framework.apollo.core.enums.ConfigFileFormat;
import com.ctrip.framework.apollo.core.enums.Env;
import com.ctrip.framework.apollo.portal.api.AdminServiceAPI;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.entity.po.UserInfo;
import com.ctrip.framework.apollo.portal.entity.vo.ItemDiffs;
import com.ctrip.framework.apollo.portal.entity.vo.NamespaceIdentifier;
diff --git a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/RoleInitializationServiceTest.java b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/RoleInitializationServiceTest.java
index 57b94186e1f845fee9777a996225020828ff8a6d..92bf59a990a0319e882913a6117f99431c819459 100644
--- a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/RoleInitializationServiceTest.java
+++ b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/RoleInitializationServiceTest.java
@@ -4,7 +4,7 @@ import com.google.common.collect.Sets;
import com.ctrip.framework.apollo.common.entity.App;
import com.ctrip.framework.apollo.portal.AbstractUnitTest;
-import com.ctrip.framework.apollo.portal.extend.UserInfoHolder;
+import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.constant.PermissionType;
import com.ctrip.framework.apollo.portal.entity.po.Permission;
import com.ctrip.framework.apollo.portal.entity.po.Role;
diff --git a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/extend/ctrip/CtripUserServiceTest.java b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/spi/ctrip/CtripUserServiceTest.java
similarity index 99%
rename from apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/extend/ctrip/CtripUserServiceTest.java
rename to apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/spi/ctrip/CtripUserServiceTest.java
index eae66b781492f906e5314fa7d44c4122c63a237a..23ee57e30282247b37e91e5d940e07b543e9eb29 100644
--- a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/extend/ctrip/CtripUserServiceTest.java
+++ b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/spi/ctrip/CtripUserServiceTest.java
@@ -1,4 +1,4 @@
-package com.ctrip.framework.apollo.portal.extend.ctrip;
+package com.ctrip.framework.apollo.portal.spi.ctrip;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;