lixing преди 4 години
родител
ревизия
f9154e5187

+ 6 - 0
fm-common/pom.xml

@@ -18,6 +18,12 @@
             <artifactId>integrated-common-core</artifactId>
         </dependency>
 
+        <!-- 集成框架安全校验类 -->
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>integrated-common-security</artifactId>
+        </dependency>
+
         <!-- web -->
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 20 - 13
fm-common/src/main/java/com/persagy/fm/common/config/RequiredParamsHandler.java

@@ -1,7 +1,10 @@
 package com.persagy.fm.common.config;
 
-import com.persagy.fm.common.model.RequiredParams;
-import com.persagy.fm.common.model.RequiredParamsStorage;
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.common.constant.RequiredParamsConstants;
+import com.persagy.fm.common.context.DefaultAppContext;
+import com.persagy.fm.common.context.DefaultAppContextFactory;
+import com.persagy.fm.common.utils.SecureAES;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
@@ -28,18 +31,22 @@ public class RequiredParamsHandler extends HandlerInterceptorAdapter {
         ) {
             return true;
         }
-        // 必填项校验
-        checkeRequiredParams(request);
 
-        RequiredParams data = new RequiredParams(
-                request.getParameter("groupCode"),
-                request.getParameter("schemaId"),
-                request.getParameter("projectId"),
-                request.getParameter("appId"),
-                request.getParameter("userId")
+        // 从token中解析数据
+        SecureAES aes = new SecureAES("63499E35378AE1B0733E3FED7F780B68", "C0E7BD39B52A15C7");
+        String tokenStr = request.getHeader("token");
+        JSONObject tokenObj = aes.decrypt(tokenStr);
+
+        DefaultAppContext.getContext().setAccountId(
+                tokenObj.getString(RequiredParamsConstants.ACCOUNT_ID)
+        );
+        DefaultAppContext.getContext().setGroupCode(
+                tokenObj.getString(RequiredParamsConstants.GROUP_CODE)
+        );
+        DefaultAppContext.getContext().setAppId(
+                tokenObj.getString(RequiredParamsConstants.APP_ID)
         );
 
-        RequiredParamsStorage.set(data);
         return true;
     }
 
@@ -64,11 +71,11 @@ public class RequiredParamsHandler extends HandlerInterceptorAdapter {
 
     @Override
     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
-        RequiredParamsStorage.clear();
+        DefaultAppContext.getFactory().unloadContext();
     }
 
     @Override
     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
-        RequiredParamsStorage.clear();
+        DefaultAppContext.getFactory().unloadContext();
     }
 }

+ 15 - 0
fm-common/src/main/java/com/persagy/fm/common/constant/RequiredParamsConstants.java

@@ -0,0 +1,15 @@
+package com.persagy.fm.common.constant;
+
+/**
+ * 必填参数常量类
+ *
+ * @author lixing
+ * @version V1.0 2021/3/25 5:50 下午
+ **/
+public class RequiredParamsConstants {
+    public static final String GROUP_CODE = "groupCode";
+    public static final String APP_ID = "appId";
+    public static final String ACCOUNT_ID = "accountId";
+    public static final String PROJECT_ID = "projectId";
+
+}

+ 69 - 60
fm-common/src/main/java/com/persagy/fm/common/context/AppContext.java

@@ -45,64 +45,73 @@ public abstract class AppContext implements Serializable {
         return factory;
     }
 
-    /**
-     * 取得操作用户主键
-     * @return 用户主键
-     */
-    public abstract String getUserId();
-
-    /**
-     * 设置操作用户主键
-     * @param userId 用户主键
-     */
-    public abstract void setUserId(String userId);
-
-    /**
-     * 取得操作用户名
-     * @return 用户名
-     */
-    public abstract String getUserName();
-
-    /**
-     * 设置操作用户名
-     * @param userName 用户名
-     */
-    public abstract void setUserName(String userName);
-
-    /**
-     * 取得租户
-     * @return 租户
-     */
-    public abstract String getTenant();
-
-    /**
-     * 设置租户
-     * @param tenant 租户
-     */
-    public abstract void setTenant(String tenant);
-
-    /**
-     * 取得产品线
-     * @return 产品线
-     */
-    public abstract String getProductLine();
-
-    /**
-     * 设置产品线
-     * @param productLine 产品线
-     */
-    public abstract void setProductLine(String productLine);
-
-    /**
-     * 动态数据源支持
-     * @return java.lang.String
-     **/
-    public abstract String getDataSourceName();
-
-    /**
-     * 设置动态数据源
-     * @param dataSourceName 动态数据源
-     * @return void
-     **/
-    public abstract void setDataSourceName(String dataSourceName);
+//    /**
+//     * 取得操作用户主键
+//     * @return 用户主键
+//     */
+//    public abstract String getUserId();
+//
+//    /**
+//     * 设置操作用户主键
+//     * @param userId 用户主键
+//     */
+//    public abstract void setUserId(String userId);
+//
+//    /**
+//     * 取得操作用户名
+//     * @return 用户名
+//     */
+//    public abstract String getUserName();
+//
+//    /**
+//     * 设置操作用户名
+//     * @param userName 用户名
+//     */
+//    public abstract void setUserName(String userName);
+//
+//    /**
+//     * 取得租户
+//     * @return 租户
+//     */
+//    public abstract String getTenant();
+//
+//    /**
+//     * 设置租户
+//     * @param tenant 租户
+//     */
+//    public abstract void setTenant(String tenant);
+//
+//    /**
+//     * 取得产品线
+//     * @return 产品线
+//     */
+//    public abstract String getProductLine();
+//
+//    /**
+//     * 设置产品线
+//     * @param productLine 产品线
+//     */
+//    public abstract void setProductLine(String productLine);
+//
+//    /**
+//     * 动态数据源支持
+//     * @return java.lang.String
+//     **/
+//    public abstract String getDataSourceName();
+//
+//    /**
+//     * 设置动态数据源
+//     * @param dataSourceName 动态数据源
+//     * @return void
+//     **/
+//    public abstract void setDataSourceName(String dataSourceName);
+
+    public abstract void setAccountId(String accountId);
+    public abstract void setProjectId(String projectId);
+    public abstract void setGroupCode(String groupCode);
+    public abstract void setAppId(String appId);
+    public abstract String getAccountId();
+    public abstract String getProjectId();
+    public abstract String getGroupCode();
+    public abstract String getAppId();
 }

+ 25 - 22
fm-common/src/main/java/com/persagy/fm/common/context/DefaultAppContext.java

@@ -13,26 +13,29 @@ public class DefaultAppContext extends AppContext {
     /**
      * 用户主键
      */
-    private String userId;
-
-    /**
-     * 用户名
-     */
-    private String userName;
-
-    /**
-     * 租户
-     */
-    private String tenant;
-
-    /**
-     * 所属产品线
-     */
-    private String productLine;
-
-    /**
-     * 数据源名称
-     */
-    private String dataSourceName;
-
+    private String accountId;
+
+//    /**
+//     * 用户名
+//     */
+//    private String userName;
+//
+//    /**
+//     * 租户
+//     */
+//    private String tenant;
+//
+//    /**
+//     * 所属产品线
+//     */
+//    private String productLine;
+//
+//    /**
+//     * 数据源名称
+//     */
+//    private String dataSourceName;
+
+    private String projectId;
+    private String appId;
+    private String groupCode;
 }

+ 35 - 24
fm-common/src/main/java/com/persagy/fm/common/exception/FmExceptionHandler.java

@@ -2,8 +2,10 @@ package com.persagy.fm.common.exception;
 
 import com.persagy.common.enums.ResponseCode;
 import com.persagy.common.exception.BusinessException;
-import com.persagy.fm.common.response.FmResponseUtil;
-import com.persagy.fm.common.response.FmResponseMsg;
+import com.persagy.fm.common.response.CommonResult;
+import com.persagy.fm.common.utils.ResultHelper;
+import com.persagy.security.exception.AESDecryptException;
+import com.persagy.security.exception.AESEncryptException;
 import feign.FeignException;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.HttpStatus;
@@ -31,9 +33,18 @@ public class FmExceptionHandler {
      * feign调用异常
      */
     @ExceptionHandler({RpcException.class})
-    public FmResponseMsg handleRpcException(RpcException e) {
+    public CommonResult handleRpcException(RpcException e) {
         log.error(e.getMessage(), e);
-        return FmResponseUtil.errorMsg(ResponseCode.C0110.getCode(), e.getMessage());
+        return ResultHelper.failure(ResponseCode.C0110.getCode(), e.getMessage());
+    }
+
+    /**
+     * token解析失败
+     */
+    @ExceptionHandler({AESDecryptException.class})
+    public CommonResult handleRpcException(AESDecryptException e) {
+        log.error(e.getMessage(), e);
+        return ResultHelper.failure(ResponseCode.A0220.getCode(), e.getMessage());
     }
 
 
@@ -41,54 +52,54 @@ public class FmExceptionHandler {
      * 空指针异常
      */
     @ExceptionHandler(NullPointerException.class)
-    public FmResponseMsg handleBusinessRuntimeException(NullPointerException e) {
+    public CommonResult handleBusinessRuntimeException(NullPointerException e) {
         log.error(e.getMessage(), e);
-        return FmResponseUtil.errorMsg(ResponseCode.B0001.getCode(), e.getMessage());
+        return ResultHelper.failure(ResponseCode.B0001.getCode(), e.getMessage());
     }
 
     /**
      * 自定义业务异常
      */
     @ExceptionHandler(BusinessException.class)
-    public FmResponseMsg handleBusinessRuntimeException(BusinessException e) {
+    public CommonResult handleBusinessRuntimeException(BusinessException e) {
         log.error(e.getMessage(), e);
-        return FmResponseUtil.errorMsg(e.getErrorCode(), e.getErrorDesc());
+        return ResultHelper.failure(e.getErrorCode(), e.getErrorDesc());
     }
 
     /**
      * 入参校验异常
      */
     @ExceptionHandler(MethodArgumentNotValidException.class)
-    public FmResponseMsg handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
+    public CommonResult handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
         log.error(e.getMessage(), e);
-        return FmResponseUtil.errorMsg(ResponseCode.A0400.getCode(), e.getBindingResult().getFieldError().getDefaultMessage());
+        return ResultHelper.failure(ResponseCode.A0400.getCode(), e.getBindingResult().getFieldError().getDefaultMessage());
     }
 
     /**
      * 入参校验异常
      */
     @ExceptionHandler(BindException.class)
-    public FmResponseMsg handleBindException(BindException e) {
+    public CommonResult handleBindException(BindException e) {
         log.error(e.getMessage(), e);
-        return FmResponseUtil.errorMsg(ResponseCode.A0400.getCode(), e.getBindingResult().getFieldError().getDefaultMessage());
+        return ResultHelper.failure(ResponseCode.A0400.getCode(), e.getBindingResult().getFieldError().getDefaultMessage());
     }
 
     /**
      * 参数校验异常,message 为手动抛出时定义的具体异常信息
      */
     @ExceptionHandler(ValidationException.class)
-    public FmResponseMsg handleValidationException(ValidationException e) {
+    public CommonResult handleValidationException(ValidationException e) {
         log.error(e.getMessage(), e);
-        return FmResponseUtil.errorMsg(ResponseCode.A0400.getCode(), e.getCause().getMessage());
+        return ResultHelper.failure(ResponseCode.A0400.getCode(), e.getCause().getMessage());
     }
 
     /**
      * 参数校验异常,message 为手动抛出时定义的具体异常信息
      */
     @ExceptionHandler(IllegalArgumentException.class)
-    public FmResponseMsg handleIllegalArgumentException(IllegalArgumentException e) {
+    public CommonResult handleIllegalArgumentException(IllegalArgumentException e) {
         log.error(e.getMessage(), e);
-        return FmResponseUtil.errorMsg(ResponseCode.A0400.getCode(), e.getMessage());
+        return ResultHelper.failure(ResponseCode.A0400.getCode(), e.getMessage());
     }
 
     /**
@@ -96,9 +107,9 @@ public class FmExceptionHandler {
      */
     @ResponseStatus(HttpStatus.NOT_FOUND)
     @ExceptionHandler(NoHandlerFoundException.class)
-    public FmResponseMsg handleNoHandlerFoundException(NoHandlerFoundException e) {
+    public CommonResult handleNoHandlerFoundException(NoHandlerFoundException e) {
         log.error(e.getMessage(), e);
-        return FmResponseUtil.errorMsg(ResponseCode.A0422.getCode(), e.getMessage());
+        return ResultHelper.failure(ResponseCode.A0422.getCode(), e.getMessage());
     }
 
     /**
@@ -106,9 +117,9 @@ public class FmExceptionHandler {
      */
     @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
     @ExceptionHandler(FeignException.class)
-    public FmResponseMsg handleFeignException(FeignException e) {
+    public CommonResult handleFeignException(FeignException e) {
         log.error(e.getMessage(), e);
-        return FmResponseUtil.errorMsg(ResponseCode.C0110.getCode(), e.getMessage());
+        return ResultHelper.failure(ResponseCode.C0110.getCode(), e.getMessage());
     }
 
     /**
@@ -116,9 +127,9 @@ public class FmExceptionHandler {
      */
     @ResponseStatus(HttpStatus.BAD_REQUEST)
     @ExceptionHandler(HttpMessageNotReadableException.class)
-    public FmResponseMsg handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {
+    public CommonResult handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {
         log.error(e.getMessage(), e);
-        return FmResponseUtil.errorMsg(ResponseCode.A0402.getCode(), ResponseCode.A0402.getDesc());
+        return ResultHelper.failure(ResponseCode.A0402.getCode(), ResponseCode.A0402.getDesc());
     }
 
     /**
@@ -126,8 +137,8 @@ public class FmExceptionHandler {
      */
     @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
     @ExceptionHandler(Exception.class)
-    public FmResponseMsg handleException(Exception e) {
+    public CommonResult handleException(Exception e) {
         log.error(e.getMessage(), e);
-        return FmResponseUtil.errorMsg(ResponseCode.Z9999.getCode(), ResponseCode.Z9999.getDesc());
+        return ResultHelper.failure(ResponseCode.Z9999.getCode(), ResponseCode.Z9999.getDesc());
     }
 }

+ 0 - 23
fm-common/src/main/java/com/persagy/fm/common/model/RequiredParams.java

@@ -1,23 +0,0 @@
-package com.persagy.fm.common.model;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * @description:
- * @author: lixing
- * @company: Persagy Technology Co.,Ltd
- * @since: 2021/3/8 9:57 上午
- * @version: V1.0
- **/
-@Setter
-@Getter
-@AllArgsConstructor
-public class RequiredParams {
-    private String groupCode;
-    private String schemaId;
-    private String projectId;
-    private String appId;
-    private String userId;
-}

+ 0 - 47
fm-common/src/main/java/com/persagy/fm/common/model/RequiredParamsStorage.java

@@ -1,47 +0,0 @@
-package com.persagy.fm.common.model;
-
-/**
- * @description:
- * @author: lixing
- * @company: Persagy Technology Co.,Ltd
- * @since: 2021/3/8 10:21 上午
- * @version: V1.0
- **/
-public class RequiredParamsStorage {
-    /**
-     * 线程内部存储类
-     */
-    private static final ThreadLocal<RequiredParams> STORAGE = new ThreadLocal();
-
-    public static void set(RequiredParams data) {
-        STORAGE.set(data);
-    }
-
-    public static RequiredParams get() {
-        return STORAGE.get();
-    }
-
-    public static void clear() {
-        STORAGE.remove();
-    }
-
-    public static String getGroupCode() {
-        return STORAGE.get().getGroupCode();
-    }
-
-    public static String getSchemaId() {
-        return STORAGE.get().getSchemaId();
-    }
-
-    public static String getProjectId() {
-        return STORAGE.get().getProjectId();
-    }
-
-    public static String getAppId() {
-        return STORAGE.get().getAppId();
-    }
-
-    public static String getUserId() {
-        return STORAGE.get().getUserId();
-    }
-}

+ 0 - 54
fm-common/src/main/java/com/persagy/fm/common/response/FmResponseUtil.java

@@ -1,54 +0,0 @@
-package com.persagy.fm.common.response;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.persagy.common.enums.ResponseCode;
-import org.apache.commons.lang3.StringUtils;
-
-import java.util.List;
-
-/**
- * @description: 服务接口调用返回值工具类
- * @author: lixing
- * @company: Persagy Technology Co.,Ltd
- * @since: 2020/9/21 11:01
- * @version: V1.0
- */
-public class FmResponseUtil {
-
-    public static <T extends List> FmResponseContent<T> successContent(T content) {
-        return successContent(content, content.size());
-    }
-
-    public static <T> FmResponseContent<List<T>> successContent(IPage<T> page) {
-        return successContent(page.getRecords(),Long.valueOf(page.getTotal()).intValue());
-    }
-
-    public static <T extends List> FmResponseContent<T> successContent(T content, Integer count) {
-        return new FmResponseContent<T>(ResponseCode.A00000.getCode(), content, count);
-    }
-
-    public static <T> FmResponseItem<T> successItem(T object) {
-        return new FmResponseItem<T>(ResponseCode.A00000.getCode(), object);
-    }
-
-    public static FmResponseMsg successMsg(String resultMsg) {
-        if (StringUtils.isBlank(resultMsg)) {
-            resultMsg = ResponseCode.A00000.getDesc();
-        }
-        return new FmResponseMsg(ResponseCode.A00000.getCode(), resultMsg);
-    }
-
-    public static FmResponseMsg errorMsg(String resultMsg) {
-        return errorMsg(null, resultMsg);
-    }
-
-    public static FmResponseMsg errorMsg(String respCode, String resultMsg) {
-        if (StringUtils.isBlank(respCode)) {
-            respCode = ResponseCode.A10000.getCode();
-        }
-        if (StringUtils.isBlank(resultMsg)) {
-            resultMsg = ResponseCode.A10000.getDesc();
-        }
-        return new FmResponseMsg(respCode, resultMsg);
-    }
-}

+ 0 - 39
fm-common/src/main/java/com/persagy/fm/common/utils/DmpUpsertResultUtil.java

@@ -1,39 +0,0 @@
-package com.persagy.fm.common.utils;
-
-import com.persagy.fm.common.response.FmDmpResponseUtil;
-import com.persagy.fm.common.response.FmResponseItem;
-import com.persagy.fm.common.response.FmResponseUtil;
-import com.persagy.fm.common.response.FmResponseUpsertVO;
-
-/**
- * @description:
- * @author: lixing
- * @company: Persagy Technology Co.,Ltd
- * @since: 2021/3/10 11:27 上午
- * @version: V1.0
- **/
-public class DmpUpsertResultUtil {
-    /**
-     * @description: 处理数据中台创建或更新结果
-     * @param: dmpUpsertResult
-     * @param: id
-     * @param: dmpInterfaceName
-     * @return: com.persagy.fm.common.response.FmResponseItem<com.persagy.fm.person.model.dto.department.ResponseDepartmentItemVO>
-     * @exception:
-     * @author: lixing
-     * @company: Persagy Technology Co.,Ltd
-     * @since: 2021/3/10 11:26 上午
-     * @version: V1.0
-     */
-    public static FmResponseItem<FmResponseUpsertVO> dealDmpUpsertResult(
-            String dmpUpsertResult, Long id, String dmpInterfaceName) {
-        // 处理数据中台返回结果
-        if (FmDmpResponseUtil.isSuccess(dmpUpsertResult)) {
-            FmResponseUpsertVO fmResponseUpsertVO = new FmResponseUpsertVO();
-            fmResponseUpsertVO.setId(id);
-            return FmResponseUtil.successItem(fmResponseUpsertVO);
-        } else {
-            throw DmpExceptionUtil.rpcException(dmpInterfaceName);
-        }
-    }
-}

+ 127 - 0
fm-common/src/main/java/com/persagy/fm/common/utils/SecureAES.java

@@ -0,0 +1,127 @@
+package com.persagy.fm.common.utils;
+
+import cn.hutool.crypto.Mode;
+import cn.hutool.crypto.Padding;
+import cn.hutool.crypto.SecureUtil;
+import cn.hutool.crypto.symmetric.AES;
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.common.utils.StringUtil;
+import com.persagy.fm.common.constant.RequiredParamsConstants;
+import com.persagy.security.exception.AESDecryptException;
+
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * 借助于hutool工具类实现 AES 128/256加密,全局编码UTF-8
+ * 
+ * @version 1.0.0
+ * @author zhangqiankun
+ * @date 2021-03-13 15:29:50
+ */
+public class SecureAES {
+	
+	public static void main(String[] args) {
+		SecureAES aes = new SecureAES("63499E35378AE1B0733E3FED7F780B68", "C0E7BD39B52A15C7");
+		String encryptAccount = aes.encrypt("TEST", "PC", "AC123456789");
+		System.out.println("account info encrypt: " + encryptAccount);
+		JSONObject decrypt = aes.decrypt(encryptAccount + ".FSD45SSD1B5D56GB5DFBD");
+		System.out.println("header token decrypt: " + decrypt.toJSONString());
+		JSONObject account = aes.decryptAccount(encryptAccount);
+		System.out.println("account info decrypt: " + account.toJSONString());
+	}
+	
+	private AES aes;
+	
+	public static final Charset CHARSET_UTF_8 = StandardCharsets.UTF_8;
+	
+	/**
+	 * 默认AES/ECB/PKCS5Padding
+	 * 
+	 * @param key 128或256位
+	 */
+	public SecureAES (String key) {
+		aes = SecureUtil.aes(key.getBytes(CHARSET_UTF_8));
+	}
+	
+	/**
+	 * 默认AES/CTS/PKCS5Padding
+	 * 
+	 * @param key 128或256位
+	 * @param iv 16字节
+	 */
+	public SecureAES (String key, String iv) {
+		aes = new AES(Mode.CTS, Padding.PKCS5Padding, key.getBytes(CHARSET_UTF_8), iv.getBytes(CHARSET_UTF_8));
+	}
+	
+	/**
+	 * 加密为16进制
+	 * 
+	 * @param content
+	 * @return
+	 */
+	public String encryptHex(String content) {
+		return aes.encryptHex(content, CHARSET_UTF_8);
+	}
+	
+	/**
+	 * 解密
+	 * 
+	 * @param content
+	 * @return
+	 */
+	public String decryptStr(String content) {
+		return aes.decryptStr(content, CHARSET_UTF_8);
+	}
+	
+	/**
+	 * 加密为16进制,参数组装为json格式数据
+	 * 
+	 * @param groupCode
+	 * @param appId
+	 * @param accountId
+	 * @return
+	 */
+	public String encrypt(String groupCode, String appId, String accountId) {
+		JSONObject object = new JSONObject();
+		object.put(RequiredParamsConstants.GROUP_CODE, groupCode);
+		object.put(RequiredParamsConstants.APP_ID, appId);
+		object.put(RequiredParamsConstants.ACCOUNT_ID, accountId);
+		return aes.encryptHex(object.toJSONString(), CHARSET_UTF_8);
+	}
+	
+	/**
+	 * 解密
+	 * 
+	 * @param headerToken token字符串
+	 * @return token内容,json格式
+	 */
+	public JSONObject decrypt(String headerToken) {
+		if (StringUtil.isBlank(headerToken)) {
+			throw new AESDecryptException("token is null");
+		}
+		String[] tokens = headerToken.split("\\.");
+		if (tokens.length != 2) {
+			throw new AESDecryptException("token invalid parameter");
+		}
+		// 加密的账号信息
+		String encryptAccount = tokens[0];
+		return this.decryptAccount(encryptAccount);
+	}
+	
+	/**
+	 * 解密
+	 * 
+	 * @param encryptAccount
+	 * @return token内容,json格式
+	 */
+	public JSONObject decryptAccount(String encryptAccount) {
+		String decryptStr = this.decryptStr(encryptAccount);
+		if (StringUtil.isBlank(decryptStr)) {
+			throw new AESDecryptException("AES decrypt failure");
+		}
+		JSONObject object = JSONObject.parseObject(decryptStr);
+		return object;
+	}
+	
+}

+ 5 - 0
fm-parent/pom.xml

@@ -57,6 +57,11 @@
             </dependency>
             <dependency>
                 <groupId>com.persagy</groupId>
+                <artifactId>integrated-common-security</artifactId>
+                <version>${platform.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.persagy</groupId>
                 <artifactId>integrated-log-spring-boot-starter</artifactId>
                 <version>${platform.version}</version>
             </dependency>