diff --git a/ice-common/ice-common-core/pom.xml b/ice-common/ice-common-core/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..878847ab171dd89699da6cf03cc17a87be6c5989
--- /dev/null
+++ b/ice-common/ice-common-core/pom.xml
@@ -0,0 +1,54 @@
+
+
+ 4.0.0
+
+ com.icedevcloud
+ ice-common
+ 0.0.1-SNAPSHOT
+
+
+ ice-common-core
+ 0.0.1-SNAPSHOT
+ jar
+
+ ice-common-core
+
+
+
+ cn.hutool
+ hutool-all
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+
+ org.springframework.security.oauth.boot
+ spring-security-oauth2-autoconfigure
+
+
+
+ com.baomidou
+ mybatis-plus-annotation
+
+
+
+ io.swagger
+ swagger-annotations
+
+
+
+ javax.servlet
+ javax.servlet-api
+
+
+
+
diff --git a/ice-common/ice-common-core/src/main/java/com/icedevcloud/common/mybatis/entity/BaseEntity.java b/ice-common/ice-common-core/src/main/java/com/icedevcloud/common/mybatis/entity/BaseEntity.java
new file mode 100644
index 0000000000000000000000000000000000000000..c8ce91e4d585a844dbabcdd147034105cdf4908e
--- /dev/null
+++ b/ice-common/ice-common-core/src/main/java/com/icedevcloud/common/mybatis/entity/BaseEntity.java
@@ -0,0 +1,37 @@
+package com.icedevcloud.common.mybatis.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+public class BaseEntity implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ID
+ */
+ @JsonSerialize(using= ToStringSerializer.class)
+ private Long id;
+
+ /**
+ * 创建时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") // TODO 修改常量
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") // TODO 修改常量
+ private LocalDateTime gmtCreate;
+
+ /**
+ * 更新时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") // TODO 修改常量
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") // TODO 修改常量
+ private LocalDateTime gmtModified;
+
+}
diff --git a/ice-common/ice-common-core/src/main/java/com/icedevcloud/common/security/component/RAccessDeniedHandler.java b/ice-common/ice-common-core/src/main/java/com/icedevcloud/common/security/component/RAccessDeniedHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..7c878cbb3779d16b1a8cd6e366ae512c34987733
--- /dev/null
+++ b/ice-common/ice-common-core/src/main/java/com/icedevcloud/common/security/component/RAccessDeniedHandler.java
@@ -0,0 +1,45 @@
+package com.icedevcloud.common.security.component;
+
+import com.icedevcloud.common.core.api.R;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.AccessDeniedException;
+import org.springframework.security.oauth2.common.exceptions.OAuth2Exception;
+import org.springframework.security.oauth2.provider.error.*;
+import org.springframework.security.web.access.AccessDeniedHandler;
+import org.springframework.web.context.request.ServletWebRequest;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * 自定义访问拒绝
+ */
+public class RAccessDeniedHandler extends AbstractOAuth2SecurityExceptionHandler implements AccessDeniedHandler {
+
+ private WebResponseExceptionTranslator exceptionTranslator = new DefaultWebResponseExceptionTranslator();
+
+ private OAuth2ExceptionRenderer exceptionRenderer = new DefaultOAuth2ExceptionRenderer();
+
+ @Override
+ public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException authException) throws IOException, ServletException {
+ try {
+ ResponseEntity translate = exceptionTranslator.translate(authException);
+ R