diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9c0418d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+
+\.idea/
+
+target/
+
+\.DS_Store
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..29e76e5
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,128 @@
+
+
+ 4.0.0
+
+ com.irrigation
+ common-lib
+ 1.0-SNAPSHOT
+
+
+ UTF-8
+ 1.8
+ 2.7.0
+ 1.16.20
+ 1.11
+ 20.0
+ 1.7.24
+ 1.2.46
+ 4.3.14.RELEASE
+ 4.2.4.RELEASE
+
+
+
+
+
+ org.slf4j
+ slf4j-api
+ ${slf4j.version}
+ provided
+
+
+ com.google.guava
+ guava
+ ${guava.vsersion}
+ provided
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+ provided
+
+
+ guava
+ com.google.guava
+
+
+ slf4j-api
+ org.slf4j
+
+
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+ provided
+
+
+ commons-codec
+ commons-codec
+ ${commons-codec.version}
+ provided
+
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+ provided
+
+
+
+ org.springframework
+ spring-web
+ ${spring-web.version}
+ provided
+
+
+
+ org.springframework.security
+ spring-security-core
+ ${spring-security-core.version}
+ provided
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.8
+ 1.8
+ UTF-8
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 2.4
+
+ true
+
+
+
+ deploy
+
+ jar-no-fork
+
+
+
+
+
+
+
+
+
+ nexus-releases
+ http://39.108.110.2:8081/repository/maven-releases/
+
+
+ nexus-snapshot
+ http://39.108.110.2:8081/repository/maven-snapshots/
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/irrigation/icl/entity/PageList.java b/src/main/java/com/irrigation/icl/entity/PageList.java
new file mode 100644
index 0000000..f741653
--- /dev/null
+++ b/src/main/java/com/irrigation/icl/entity/PageList.java
@@ -0,0 +1,26 @@
+package com.irrigation.icl.entity;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel(value = "分页返回类")
+public class PageList {
+
+ @ApiModelProperty(value = "总页数")
+ private int pages;
+ @ApiModelProperty(value = "总条数")
+ private long total;
+ @ApiModelProperty(value = "返回数据")
+ private List list;
+
+
+}
diff --git a/src/main/java/com/irrigation/icl/entity/PageParam.java b/src/main/java/com/irrigation/icl/entity/PageParam.java
new file mode 100644
index 0000000..ca921ee
--- /dev/null
+++ b/src/main/java/com/irrigation/icl/entity/PageParam.java
@@ -0,0 +1,19 @@
+package com.irrigation.icl.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel(value = "分页参数类")
+public class PageParam {
+
+ @ApiModelProperty(value = "当前页")
+ private Integer page = 1;
+ @ApiModelProperty(value = "每页最大条目")
+ private Integer rows = 10;
+}
diff --git a/src/main/java/com/irrigation/icl/entity/RestResult.java b/src/main/java/com/irrigation/icl/entity/RestResult.java
new file mode 100644
index 0000000..aff2c7c
--- /dev/null
+++ b/src/main/java/com/irrigation/icl/entity/RestResult.java
@@ -0,0 +1,31 @@
+package com.irrigation.icl.entity;
+
+
+import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.irrigation.icl.enums.ResultEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value = "公共返回类")
+public class RestResult {
+ @ApiModelProperty(value = "返回编码类型")
+ private int code;
+ @ApiModelProperty(value = "返回提示消息")
+ private String message;
+ @ApiModelProperty(value = "返回请求数据对象")
+ private T data;
+
+ public String getMessage() {
+ return message != null?message: ResultEnum.getCode(code).getMessage();
+ }
+ public String toString(){
+ return JSON.toJSONString(this);
+ }
+}
diff --git a/src/main/java/com/irrigation/icl/enums/ResultEnum.java b/src/main/java/com/irrigation/icl/enums/ResultEnum.java
new file mode 100644
index 0000000..8bfab7d
--- /dev/null
+++ b/src/main/java/com/irrigation/icl/enums/ResultEnum.java
@@ -0,0 +1,51 @@
+package com.irrigation.icl.enums;
+
+import java.util.Arrays;
+import java.util.Optional;
+
+public enum ResultEnum {
+
+ SUCCESS(200, "success"),
+ SUCCESS_NO_DATA(202,"查询成功,无数据"),
+ ERROR(400, "failed"),
+
+ PARAMETER_MISMATCH(402, "参数不匹配!"),
+
+ INVALID_REQUEST(405, "请求错误!"),
+
+ HTTP_SERVER_ERROR(500, "服务异常!"),
+
+ DATA_ACCESS(501, "数据库异常!"),
+
+ DATA_OPT(502, "数据库操作异常!"),
+
+ REMOTE_CALL_FAILED(503,"远程调用失败"),
+
+ SESSION_EXPIRE(401, "会话失效,请重新登录!");
+
+ private final int code;
+ private final String message;
+
+ private ResultEnum(int code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+
+
+ public int getCode() {
+ return this.code;
+ }
+
+ public String getMessage() {
+
+ return this.message;
+ }
+
+ public static ResultEnum getCode(int code) {
+ ResultEnum[] codes = ResultEnum.values();
+ Optional optional = Arrays
+ .stream(codes)
+ .filter(t -> t.code == code).findFirst();
+ return optional.isPresent() ? optional.get() : ResultEnum.ERROR;
+ }
+}
diff --git a/src/main/java/com/irrigation/icl/exception/AbstractException.java b/src/main/java/com/irrigation/icl/exception/AbstractException.java
new file mode 100644
index 0000000..50a07bb
--- /dev/null
+++ b/src/main/java/com/irrigation/icl/exception/AbstractException.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2018.
+ * 项目名称:auth-gateway-backend
+ * 文件名称:AbstractException.java
+ * Date:18-3-21 上午10:15
+ * Author:boni
+ */
+
+package com.irrigation.icl.exception;
+
+
+
+import com.irrigation.icl.exception.code.ErrorCode;
+import org.springframework.http.HttpStatus;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+public abstract class AbstractException extends RuntimeException {
+ private static final long serialVersionUID = 1L;
+
+ private final HttpStatus status;
+
+ private final int code;
+
+ private final String message;
+
+ private final String detailMessage;
+
+ public AbstractException(HttpStatus status, ErrorCode errorCode) {
+ this.status = status;
+ this.code = errorCode.getCode();
+ this.message = errorCode.getMessage();
+ this.detailMessage = errorCode.getDetailMessage();
+ }
+
+ public AbstractException(HttpStatus status) {
+ this.status = status;
+ code = 0;
+ message = null;
+ detailMessage = null;
+ }
+
+ public AbstractException(HttpStatus status, ErrorCode errorCode, Throwable cause) {
+ super(cause);
+ this.status = status;
+ this.code = errorCode.getCode();
+ this.message = errorCode.getMessage();
+ detailMessage = (cause.getMessage() != null ? cause.getMessage() : "") + toStackTrace(cause);
+ }
+
+ private String toStackTrace(Throwable e) {
+ StringWriter errorStackTrace = new StringWriter();
+ e.printStackTrace(new PrintWriter(errorStackTrace));
+ return errorStackTrace.toString();
+
+ }
+
+ public HttpStatus getStatus() {
+ return status;
+ }
+
+ public ErrorCode getCode() {
+ return new ErrorCode(code, message, detailMessage);
+ }
+
+ @Override
+ public String getMessage() {
+ return message;
+ }
+
+ public String getDetailMessage() {
+ return detailMessage;
+ }
+}
diff --git a/src/main/java/com/irrigation/icl/exception/ContextRuntimeException.java b/src/main/java/com/irrigation/icl/exception/ContextRuntimeException.java
new file mode 100644
index 0000000..9e70b52
--- /dev/null
+++ b/src/main/java/com/irrigation/icl/exception/ContextRuntimeException.java
@@ -0,0 +1,12 @@
+package com.irrigation.icl.exception;
+
+public class ContextRuntimeException extends RuntimeException {
+
+ public ContextRuntimeException(String message) {
+ super(message);
+ }
+
+ public ContextRuntimeException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/src/main/java/com/irrigation/icl/exception/RemoteException.java b/src/main/java/com/irrigation/icl/exception/RemoteException.java
new file mode 100644
index 0000000..cd8f78a
--- /dev/null
+++ b/src/main/java/com/irrigation/icl/exception/RemoteException.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2018.
+ * 项目名称:auth-gateway-backend
+ * 文件名称:RemoteException.java
+ * Date:18-3-21 上午10:15
+ * Author:boni
+ */
+
+package com.irrigation.icl.exception;
+
+
+
+import com.irrigation.icl.exception.code.ErrorCode;
+
+import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR;
+
+public class RemoteException extends AbstractException {
+
+ public RemoteException() {
+ super(INTERNAL_SERVER_ERROR);
+ }
+
+ public RemoteException(ErrorCode errorCode) {
+ super(INTERNAL_SERVER_ERROR, errorCode);
+ }
+
+ public RemoteException(ErrorCode errorCode, Throwable cause) {
+ super(INTERNAL_SERVER_ERROR, errorCode, cause);
+ }
+}
diff --git a/src/main/java/com/irrigation/icl/exception/code/ErrorCode.java b/src/main/java/com/irrigation/icl/exception/code/ErrorCode.java
new file mode 100644
index 0000000..0a83547
--- /dev/null
+++ b/src/main/java/com/irrigation/icl/exception/code/ErrorCode.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2018.
+ * 项目名称:auth-gateway-backend
+ * 文件名称:ErrorCode.java
+ * Date:18-3-21 上午10:15
+ * Author:boni
+ */
+
+package com.irrigation.icl.exception.code;
+
+public class ErrorCode {
+
+ private final int code;
+ private final String message;
+ private final String detailMessage;
+
+ public ErrorCode(int code, String message, String detailMessage) {
+ this.code = code;
+ this.message = message;
+ this.detailMessage = detailMessage;
+ }
+
+ public ErrorCode(String message, String detailMessage) {
+ this.code = 0;
+ this.message = message;
+ this.detailMessage = detailMessage;
+ }
+
+ public int getCode() {
+ return code;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public String getDetailMessage() {
+ return detailMessage;
+ }
+}
diff --git a/src/main/java/com/irrigation/icl/exception/code/ErrorCodes.java b/src/main/java/com/irrigation/icl/exception/code/ErrorCodes.java
new file mode 100644
index 0000000..4073b31
--- /dev/null
+++ b/src/main/java/com/irrigation/icl/exception/code/ErrorCodes.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2018.
+ * 项目名称:auth-gateway-backend
+ * 文件名称:ErrorCodes.java
+ * Date:18-3-21 上午10:15
+ * Author:boni
+ */
+
+package com.irrigation.icl.exception.code;
+
+
+public class ErrorCodes {
+
+ private ErrorCodes(){}
+ public static final String CLIENT_ID_IS_NULL_STR = "CLIENT_ID_IS_NULL";
+ public static final String CLIENT_SECRET_IS_NULL_STR = "CLIENT_SECRET_IS_NULL";
+
+ public static final String ORGANIZAITON_ID_IS_NULL_STR = "ORGANIZAITON_ID_IS_NULL";
+
+ /* 500 Internal Server Error */
+
+ public static final ErrorCode DEVICE_ID_IS_NULL_STR = new ErrorCode("DEVICE_ID_IS_NULL_STR", "设备 ID 非法");
+ public static final ErrorCode NOT_LOGIN_YET = new ErrorCode("NOT_LOGIN_YET", "没有用户已登录当前设备");
+
+ public static final ErrorCode USER_SERVICE_CALL_FAILURE = new ErrorCode("USER_SERVICE_CALL_FAILURE", "无法调用远程用户系统,或调用失败");
+ public static final ErrorCode ID_SERVICE_CALL_FAILURE = new ErrorCode("ID_SERVICE_CALL_FAILURE", "无法调用远程用ID_SERVICE,或调用失败");
+
+ public static final ErrorCode INVALID_AUTHENTICATION_ERROR = new ErrorCode("INVALID_AUTHENTICATION", "用户证书校验失败");
+
+}
diff --git a/src/main/java/com/irrigation/icl/exception/code/GenericErrorCodes.java b/src/main/java/com/irrigation/icl/exception/code/GenericErrorCodes.java
new file mode 100644
index 0000000..a268055
--- /dev/null
+++ b/src/main/java/com/irrigation/icl/exception/code/GenericErrorCodes.java
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2018.
+ * 项目名称:auth-gateway-backend
+ * 文件名称:GenericErrorCodes.java
+ * Date:18-3-21 上午10:15
+ * Author:boni
+ */
+
+package com.irrigation.icl.exception.code;
+
+public class GenericErrorCodes {
+ public static ErrorCode GENERIC_API_ERROR_CODE =
+ new ErrorCode(0001, "GENERIC_API_ERROR_CODE", "generic API error message");
+ public static ErrorCode GENERIC_UNAUTHORIZED_ERROR_CODE =
+ new ErrorCode(0002, "GENERIC_UNAUTHORIZED_ERROR_CODE", "generic unauthorized error message");
+ public static ErrorCode DATA_ACCESS_ERROR_CODE =
+ new ErrorCode(0003, "DATA_ACCESS_ERROR", "database access error");
+}
diff --git a/src/main/java/com/irrigation/icl/utils/PasswordEncoderUtil.java b/src/main/java/com/irrigation/icl/utils/PasswordEncoderUtil.java
new file mode 100644
index 0000000..8bd3600
--- /dev/null
+++ b/src/main/java/com/irrigation/icl/utils/PasswordEncoderUtil.java
@@ -0,0 +1,18 @@
+package com.irrigation.icl.utils;
+
+import org.springframework.security.authentication.encoding.BasePasswordEncoder;
+import org.springframework.security.authentication.encoding.Md5PasswordEncoder;
+
+public class PasswordEncoderUtil {
+
+ private final static BasePasswordEncoder encoder = new Md5PasswordEncoder();
+
+ public static String encodePassword(String password) {
+ return encoder.encodePassword(password, null);
+ }
+
+ public static boolean isPasswordValid(String rawPassword, String encodedPassword) {
+ return encoder.isPasswordValid(encodedPassword, rawPassword, null);
+ }
+
+}
diff --git a/src/main/java/com/irrigation/icl/utils/RestResultGeneratorUtil.java b/src/main/java/com/irrigation/icl/utils/RestResultGeneratorUtil.java
new file mode 100644
index 0000000..1797e90
--- /dev/null
+++ b/src/main/java/com/irrigation/icl/utils/RestResultGeneratorUtil.java
@@ -0,0 +1,33 @@
+package com.irrigation.icl.utils;
+
+
+import com.irrigation.icl.entity.RestResult;
+import com.irrigation.icl.enums.ResultEnum;
+
+public class RestResultGeneratorUtil {
+
+ public static RestResult getResult(int code, T data, String message) {
+ RestResult result = new RestResult<>(code, message, data);
+ return result;
+ }
+
+ public static RestResult getSuccessResult(T data) {
+ return getResult(ResultEnum.SUCCESS.getCode(), data, ResultEnum.SUCCESS.getMessage());
+ }
+
+ public static RestResult getSuccessResult() {
+ return getResult(ResultEnum.SUCCESS.getCode(), null, ResultEnum.SUCCESS.getMessage());
+ }
+
+ public static RestResult getErrorResult(String message) {
+ return getResult(ResultEnum.ERROR.getCode(), null, message);
+ }
+
+ public static RestResult getErrorResult(int code, String message) {
+ return getResult(code, null, message);
+ }
+
+ public static RestResult getErrorResult(ResultEnum resultEnum) {
+ return getResult(resultEnum.getCode(), null, resultEnum.getMessage());
+ }
+}
diff --git a/src/main/java/com/irrigation/icl/utils/SignUtil.java b/src/main/java/com/irrigation/icl/utils/SignUtil.java
new file mode 100644
index 0000000..0ad813e
--- /dev/null
+++ b/src/main/java/com/irrigation/icl/utils/SignUtil.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2018.
+ * 项目名称:auth-gateway-backend
+ * 文件名称:SignUtil.java
+ * Date:18-3-23 下午3:34
+ * Author:boni
+ */
+
+package com.irrigation.icl.utils;
+
+import org.apache.commons.codec.digest.DigestUtils;
+
+import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 签名方法
+ */
+public class SignUtil {
+ /**
+ * 使用apiSecret对params进行签名,自动加入了当前日期
+ * @param params
+ * @param apiSecret
+ * @return
+ */
+ public static String sign(Map params, String apiSecret) {
+ String[] sortParams = params.keySet().toArray(new String[]{});
+ Arrays.sort(sortParams);
+ StringBuilder stringBuilder = new StringBuilder();
+ for (String key : sortParams) {
+ stringBuilder.append(key).append(params.get(key));
+ }
+ String signRawData = apiSecret + ":" + getDate() + ":" + stringBuilder.toString();
+ String signedValue = DigestUtils.md5Hex(signRawData);
+ return signedValue;
+ }
+
+ private static String getDate() {
+ Date date = new Date();
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+ String sDateSuffix = dateFormat.format(date);
+ return sDateSuffix;
+ }
+}