Selaa lähdekoodia

Merge remote-tracking branch 'origin/develop-v3.0.0' into develop-v3.0.0

lijie 3 vuotta sitten
vanhempi
commit
b681bca326

+ 18 - 0
fm-common/pom.xml

@@ -74,5 +74,23 @@
             <artifactId>TinyPinyin</artifactId>
             <version>2.0.3.RELEASE</version>
         </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-spi</artifactId>
+            <version>2.9.2</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>1.5.22</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger-common</artifactId>
+            <version>2.9.2</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 </project>

+ 0 - 1
fm-common/src/main/java/com/persagy/fm/common/config/FeignExceptionHandler.java

@@ -18,7 +18,6 @@ import org.springframework.stereotype.Component;
  * @version V1.0 2021/3/24 4:55 下午
  **/
 @Aspect
-@Component
 public class FeignExceptionHandler {
 
     @Pointcut("@within(org.springframework.cloud.openfeign.FeignClient)")

+ 95 - 0
fm-common/src/main/java/com/persagy/fm/common/config/JacksonConfig.java

@@ -0,0 +1,95 @@
+package com.persagy.fm.common.config;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
+import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Jackson统一处理返回值
+ *
+ * @author lixing
+ * @version V1.0 2021/4/20 10:15 上午
+ */
+@Configuration
+public class JacksonConfig {
+    @Bean
+    @Primary
+    @ConditionalOnMissingBean(ObjectMapper.class)
+    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
+        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
+        objectMapper.setSerializerFactory(objectMapper.getSerializerFactory()
+                .withSerializerModifier(new MyBeanSerializerModifier()));
+        return objectMapper;
+    }
+
+    public static class MyNullArrayJsonSerializer extends JsonSerializer {
+        @Override
+        public void serialize(Object value, JsonGenerator generator, SerializerProvider provider) throws IOException {
+            if (value == null) {
+                generator.writeStartArray();
+                generator.writeEndArray();
+            }
+        }
+    }
+
+    public static class MyNullObjJsonSerializer extends JsonSerializer {
+        @Override
+        public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
+                throws IOException {
+            jsonGenerator.writeStartObject();
+            jsonGenerator.writeEndObject();
+        }
+    }
+
+    public static class MyBeanSerializerModifier extends BeanSerializerModifier {
+        // 数组,集合类型 null -> []
+        private JsonSerializer nullArrayJsonSerializer = new MyNullArrayJsonSerializer();
+        // 字符串等类型 null -> ""
+        private JsonSerializer nullObjJsonSerializer = new MyNullObjJsonSerializer();
+
+        @Override
+        public List<BeanPropertyWriter> changeProperties(
+                SerializationConfig config, BeanDescription beanDesc,
+                List beanProperties) {
+            for (Object beanProperty : beanProperties) {
+                BeanPropertyWriter writer = (BeanPropertyWriter) beanProperty;
+                //判断字段的类型,如果是array,list,set则注册nullSerializer
+                if (isArrayType(writer)) {
+                    writer.assignNullSerializer(this.nullArrayJsonSerializer);
+                } else if (!isBasicType(writer)){
+                    writer.assignNullSerializer(this.nullObjJsonSerializer);
+                }
+            }
+            return beanProperties;
+        }
+
+        boolean isArrayType(BeanPropertyWriter writer) {
+            Class clazz = writer.getPropertyType();
+            return clazz.isArray() || clazz.equals(List.class) || clazz.equals(Set.class);
+        }
+
+        boolean isBasicType(BeanPropertyWriter writer) {
+            Class clazz = writer.getPropertyType();
+            return clazz.equals(Integer.class) ||
+                    clazz.equals(Long.class) ||
+                    clazz.equals(Double.class) ||
+                    clazz.equals(Float.class) ||
+                    clazz.equals(Short.class) ||
+                    clazz.equals(Boolean.class) ||
+                    clazz.equals(Byte.class) ||
+                    clazz.equals(Date.class) ||
+                    clazz.equals(String.class);
+        }
+    }
+}

+ 131 - 0
fm-common/src/main/java/com/persagy/fm/common/config/SwaggerDisplayConfig.java

@@ -0,0 +1,131 @@
+package com.persagy.fm.common.config;
+
+import com.fasterxml.classmate.ResolvedType;
+import com.google.common.base.Optional;
+import com.persagy.fm.common.model.annotation.SwaggerDisplayEnum;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.annotation.AnnotationUtils;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ReflectionUtils;
+import springfox.documentation.builders.ModelPropertyBuilder;
+import springfox.documentation.schema.Annotations;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.schema.ModelPropertyBuilderPlugin;
+import springfox.documentation.spi.schema.contexts.ModelPropertyContext;
+import springfox.documentation.swagger.schema.ApiModelProperties;
+
+import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * swagger注释自动加载枚举类型
+ *
+ * @author lixing
+ * @version V1.0 2021/4/12 10:43 上午
+ **/
+@Component
+@Primary
+@Slf4j
+public class SwaggerDisplayConfig implements ModelPropertyBuilderPlugin {
+
+
+    @Override
+    public void apply(ModelPropertyContext context) {
+        //获取当前字段的类型
+        final Class fieldType = context.getBeanPropertyDefinition().get().getField().getRawType();
+
+        //为枚举字段设置注释
+        descForEnumFields(context, fieldType);
+    }
+
+    /**
+     * 为枚举字段设置注释
+     */
+    private void descForEnumFields(ModelPropertyContext context, Class fieldType) {
+        Optional<ApiModelProperty> annotation = Optional.absent();
+
+        if (context.getAnnotatedElement().isPresent()) {
+            annotation = annotation
+                    .or(ApiModelProperties.findApiModePropertyAnnotation(context.getAnnotatedElement().get()));
+        }
+        if (context.getBeanPropertyDefinition().isPresent()) {
+            annotation = annotation.or(Annotations.findPropertyAnnotation(
+                    context.getBeanPropertyDefinition().get(),
+                    ApiModelProperty.class));
+        }
+
+        //没有@ApiModelProperty 或者 notes 属性没有值,直接返回
+        if (!annotation.isPresent() || StringUtils.isBlank((annotation.get()).notes())) {
+            return;
+        }
+
+        //@ApiModelProperties中的notes指定的class类型
+        Class rawPrimaryType;
+        try {
+            rawPrimaryType = Class.forName((annotation.get()).notes());
+        } catch (ClassNotFoundException e) {
+            //如果指定的类型无法转化,直接忽略
+            return;
+        }
+
+        //如果对应的class是一个@SwaggerDisplayEnum修饰的枚举类,获取其中的枚举值
+        Object[] subItemRecords = null;
+        SwaggerDisplayEnum swaggerDisplayEnum = AnnotationUtils
+                .findAnnotation(rawPrimaryType, SwaggerDisplayEnum.class);
+        if (null != swaggerDisplayEnum && Enum.class.isAssignableFrom(rawPrimaryType)) {
+            subItemRecords = rawPrimaryType.getEnumConstants();
+        }
+        if (null == subItemRecords) {
+            return;
+        }
+
+
+        final List<String> displayValues = Arrays.stream(subItemRecords).filter(Objects::nonNull).map(item -> {
+            String typeName = swaggerDisplayEnum.type();
+            String descName = swaggerDisplayEnum.desc();
+
+            Object type = null;
+            Object desc = null;
+
+            Field typeField = ReflectionUtils.findField(item.getClass(), typeName);
+            if (typeField != null) {
+                ReflectionUtils.makeAccessible(typeField);
+                type = ReflectionUtils.getField(typeField, item);
+            }
+
+            Field descField = ReflectionUtils.findField(item.getClass(), descName);
+            if (descField != null) {
+                ReflectionUtils.makeAccessible(descField);
+                desc = ReflectionUtils.getField(descField, item);
+            }
+            type = type == null ? "" : type;
+            desc = desc == null ? "" : desc;
+            return type + ":" + desc;
+        }).filter(Objects::nonNull).collect(Collectors.toList());
+
+        String joinText = " (" + String.join("; ", displayValues) + ")";
+        try {
+            Field mField = ModelPropertyBuilder.class.getDeclaredField("description");
+            mField.setAccessible(true);
+            joinText = mField.get(context.getBuilder()) + joinText;
+        } catch (Exception e) {
+            log.error(e.getMessage());
+        }
+
+        final ResolvedType resolvedType = context.getResolver().resolve(fieldType);
+        context.getBuilder().description(joinText).type(resolvedType);
+    }
+
+
+    @Override
+    public boolean supports(DocumentationType documentationType) {
+        return true;
+    }
+
+}

+ 18 - 5
fm-common/src/main/java/com/persagy/fm/common/constant/RegexConstants.java

@@ -28,20 +28,27 @@ public class RegexConstants {
      */
     private static final String NUM_REGEX = "[0-9]";
     /**
-     * 允许的特殊字符正则表达式
+     * 经常允许的特殊字符正则表达式
      */
     private static final String CHAR_REGEX = "['._#~]";
 
+    /**
+     * 所有允许的特殊字符正则表达式
+     */
+    private static final String ALL_CHAR_REGEX = "[!\"#\\$%&'\\(\\)\\*\\+,-\\.\\/:;<=>\\?@\\[\\\\\\]\\^\\\\`\\{\\|\\}~\\s]";
+
     private static final String EN_REGEX_EXPRESSION = LOWERCASE_REGEX + "|" + UPPERCASE_REGEX;
     private static final String EN_NUM_REGEX_EXPRESSION = EN_REGEX_EXPRESSION + "|" + NUM_REGEX;
     private static final String EN_NUM_CHAR_REGEX_EXPRESSION = EN_NUM_REGEX_EXPRESSION + "|" + CHAR_REGEX;
     private static final String NAME_REGEX_EXPRESSION = EN_NUM_CHAR_REGEX_EXPRESSION + "|" + CH_REGEX;
+    private static final String ALL_REGEX_EXPRESSION = EN_NUM_REGEX_EXPRESSION + "|" + CH_REGEX + "|" + ALL_CHAR_REGEX;
     private static final String TEXT_REGEX_EXPRESSION = CH_REGEX + "|" + EN_REGEX_EXPRESSION;
 
     /**
      * 允许的字符正则表达式报警信息
      */
     private static final String CHAR_REGEX_WARNING = " ' . _  #  ~  ";
+    private static final String ALL_CHAR_REGEX_WARNING = "空格和! \" # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \\ ] ^ _` { | } ~";
 
     /**
      * 名称正则表达式
@@ -56,15 +63,21 @@ public class RegexConstants {
     public static final String NAME_REGEX_WARNING = "仅可输入中文,字母,数字以及" + CHAR_REGEX_WARNING;
 
     /**
-     * 文本正则表达式
+     * 常用文本正则表达式
      * 支持中英文字符
      */
     public static final String TEXT_REGEX = "(" + TEXT_REGEX_EXPRESSION + ")+";
+    /**
+     * 所有允许的文本正则表达式
+     * 支持中英文字符
+     */
+    public static final String ALL_REGEX = "(" + ALL_REGEX_EXPRESSION + ")+";
 
     /**
      * 文本正则表达式报警信息
      */
     public static final String TEXT_REGEX_WARNING = "仅可输入中文,字母";
+    public static final String ALL_REGEX_WARNING = "仅可输入中文,字母,数字以及" + ALL_CHAR_REGEX_WARNING;
 
     /**
      * 英文正则表达式
@@ -106,16 +119,16 @@ public class RegexConstants {
     /**
      * 身份证非法提示
      */
-    public static final String ID_CARD_REGEX_WARNING = "身份证格式错误";
+    public static final String ID_CARD_REGEX_WARNING = "请输入正确身份证号";
 
     /**
      * 手机号正则表达式
      */
-    public static final String PHONE_REGEX = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8}$";
+    public static final String PHONE_REGEX = "^\\d{11}$";
     public static final String PHONE_OR_BLANK_REGEX = "(" +BLANK_REGEX + "|" + PHONE_REGEX + ")";
 
     /**
      * 手机号非法提示
      */
-    public static final String PHONE_REGEX_WARNING = "手机号格式错误";
+    public static final String PHONE_REGEX_WARNING = "请输入正确手机号码";
 }

+ 3 - 0
fm-common/src/main/java/com/persagy/fm/common/constant/enums/BoolEnum.java

@@ -1,5 +1,7 @@
 package com.persagy.fm.common.constant.enums;
 
+import com.persagy.fm.common.model.annotation.SwaggerDisplayEnum;
+
 /**
  * @description: 合法标志
  * @author: lixing
@@ -7,6 +9,7 @@ package com.persagy.fm.common.constant.enums;
  * @since: 2021/3/9 2:56 下午
  * @version: V1.0
  */
+@SwaggerDisplayEnum
 public enum BoolEnum {
     FALSE("0", false),
     TRUE("1", true);

+ 3 - 0
fm-common/src/main/java/com/persagy/fm/common/constant/enums/ValidEnum.java

@@ -1,5 +1,7 @@
 package com.persagy.fm.common.constant.enums;
 
+import com.persagy.fm.common.model.annotation.SwaggerDisplayEnum;
+
 /**
  * @description: 合法标志
  * @author: lixing
@@ -7,6 +9,7 @@ package com.persagy.fm.common.constant.enums;
  * @since: 2021/3/9 2:56 下午
  * @version: V1.0
  */
+@SwaggerDisplayEnum
 public enum ValidEnum {
     FALSE(0, false),
     TRUE(1, true);

+ 8 - 1
fm-common/src/main/java/com/persagy/fm/common/handler/AppContextHandler.java

@@ -5,12 +5,14 @@ import com.persagy.fm.common.constant.AppContextConstants;
 import com.persagy.fm.common.context.AppContext;
 import com.persagy.fm.common.context.DefaultAppContext;
 import com.persagy.fm.common.utils.SecureAES;
+import com.persagy.security.exception.AESDecryptException;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.UnsupportedEncodingException;
 
 /**
  * @description:
@@ -41,7 +43,12 @@ public class AppContextHandler extends HandlerInterceptorAdapter {
     private void ensureContextInfo(String token){
         // 从token中解析数据
         SecureAES aes = new SecureAES("63499E35378AE1B0733E3FED7F780B68", "C0E7BD39B52A15C7");
-        JSONObject tokenObj = aes.decrypt(token);
+        JSONObject tokenObj = null;
+        try {
+            tokenObj = aes.decryptToken(token);
+        } catch (UnsupportedEncodingException e) {
+            throw new AESDecryptException("token解析异常");
+        }
         // 获取值
         String accountId = tokenObj.getString(AppContextConstants.ACCOUNT_ID);
         String groupCode = tokenObj.getString(AppContextConstants.GROUP_CODE);

+ 19 - 0
fm-common/src/main/java/com/persagy/fm/common/model/annotation/SwaggerDisplayEnum.java

@@ -0,0 +1,19 @@
+package com.persagy.fm.common.model.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * swagger枚举类注解
+ *
+ * @author lixing
+ * @version V1.0 2021/4/12 10:39 上午
+ **/
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface SwaggerDisplayEnum {
+    String type() default "type";
+    String desc() default "desc";
+}

+ 11 - 0
fm-common/src/main/java/com/persagy/fm/common/model/dto/PageDTO.java

@@ -1,6 +1,7 @@
 package com.persagy.fm.common.model.dto;
 
 import lombok.Data;
+import net.minidev.json.annotate.JsonIgnore;
 
 import javax.validation.constraints.NotNull;
 import java.util.List;
@@ -21,5 +22,15 @@ public class PageDTO {
     private Integer size;
 
     private List<Sort> orders;
+
+    @JsonIgnore
+    private Integer startIndex;
+
+    public Integer getStartIndex() {
+        if (page == null || size == null) {
+            return 0;
+        }
+        return (page -1) * size;
+    }
 }
 

+ 1 - 1
fm-common/src/main/java/com/persagy/fm/common/model/entity/BaseEntity.java

@@ -49,7 +49,7 @@ public abstract class BaseEntity<T> extends Model implements IBaseEntity,Seriali
 
 	/** 实体状态 - 有效标识 */
 	@TableField(fill = FieldFill.INSERT)
-	protected int valid;
+	protected Integer valid;
 
 	@Override
 	public boolean equals (Object obj) {

+ 2 - 2
fm-common/src/main/java/com/persagy/fm/common/model/entity/IBaseEntity.java

@@ -38,12 +38,12 @@ public interface IBaseEntity extends Comparable<IBaseEntity>{
 	 * 取得实体状态
 	 * @return 实体状态
 	 */
-	int getValid();
+	Integer getValid();
 
 	/**
 	 * 设置实体状态
 	 * @param status 实体状态
 	 */
-	void setValid(int status);
+	void setValid(Integer status);
 	
 }

+ 6 - 2
fm-common/src/main/java/com/persagy/fm/common/utils/ListUtil.java

@@ -58,12 +58,16 @@ public class ListUtil {
 
     public static <T> Boolean listChanged(List<T> listBefore, List<T> listAfter) {
         if (listBefore == null) {
-            return listAfter == null;
+            return listAfter != null;
         }
         if (listAfter == null) {
             return true;
         }
-        return listBefore.retainAll(listAfter) || listAfter.retainAll(listBefore);
+
+        // 先将list复制再比较,retainAll方法会改变list的内容
+        List<T> listBeforeCopy = Lists.newArrayList(listBefore);
+        List<T> listAfterCopy = Lists.newArrayList(listAfter);
+        return listBeforeCopy.retainAll(listAfterCopy) || listAfterCopy.retainAll(listBeforeCopy);
     }
 
 //    public static void main(String[] args) {

+ 42 - 25
fm-common/src/main/java/com/persagy/fm/common/utils/SecureAES.java

@@ -6,9 +6,11 @@ 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.AppContextConstants;
 import com.persagy.security.exception.AESDecryptException;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 
@@ -16,16 +18,19 @@ import java.nio.charset.StandardCharsets;
  * 借助于hutool工具类实现 AES 128/256加密,全局编码UTF-8
  * 
  * @version 1.0.0
+ * @company persagy 
  * @author zhangqiankun
  * @date 2021-03-13 15:29:50
  */
 public class SecureAES {
 	
-	public static void main(String[] args) {
+	public static void main(String[] args) throws UnsupportedEncodingException {
 		SecureAES aes = new SecureAES("63499E35378AE1B0733E3FED7F780B68", "C0E7BD39B52A15C7");
-		String encryptAccount = aes.encrypt("TEST", "PC", "AC123456789");
+		JSONObject object = new JSONObject();
+		object.put("groupCode", "TEST");
+		String encryptAccount = aes.encryptAccount(object);
 		System.out.println("account info encrypt: " + encryptAccount);
-		JSONObject decrypt = aes.decrypt(encryptAccount + ".FSD45SSD1B5D56GB5DFBD");
+		JSONObject decrypt = aes.decryptToken(encryptAccount + ".FSD45SSD1B5D56GB5DFBD");
 		System.out.println("header token decrypt: " + decrypt.toJSONString());
 		JSONObject account = aes.decryptAccount(encryptAccount);
 		System.out.println("account info decrypt: " + account.toJSONString());
@@ -75,48 +80,60 @@ public class SecureAES {
 	}
 	
 	/**
-	 * 加密为16进制,参数组装为json格式数据
+	 * 解密
 	 * 
-	 * @param groupCode
-	 * @param appId
-	 * @param accountId
+	 * @param content
 	 * @return
+	 * @throws UnsupportedEncodingException 
 	 */
-	public String encrypt(String groupCode, String appId, String accountId) {
-		JSONObject object = new JSONObject();
-		object.put(AppContextConstants.GROUP_CODE, groupCode);
-		object.put(AppContextConstants.APP_ID, appId);
-		object.put(AppContextConstants.ACCOUNT_ID, accountId);
-		return aes.encryptHex(object.toJSONString(), CHARSET_UTF_8);
+	public String decryptFromBase64(String content) throws UnsupportedEncodingException {
+		String decode = URLDecoder.decode(content, CHARSET_UTF_8.toString());
+		return aes.decryptStr(decode, CHARSET_UTF_8);
 	}
 	
 	/**
-	 * 解密
+	 * 加密为16进制,参数组装为json格式数据
+	 */
+	public String encryptToBase64(JSONObject object) throws UnsupportedEncodingException {
+		String encryptHex = aes.encryptHex(object.toJSONString(), CHARSET_UTF_8);
+		return URLEncoder.encode(encryptHex, CHARSET_UTF_8.toString());
+	}
+	
+	/**
+	 * 加密为16进制,参数组装为json格式数据,且经过URLEncoder编码
+	 * 
+	 * @throws UnsupportedEncodingException
+	 */
+	public String encryptAccount(JSONObject object) throws UnsupportedEncodingException {
+		String encryptHex = aes.encryptHex(object.toJSONString(), CHARSET_UTF_8);
+		return URLEncoder.encode(encryptHex, CHARSET_UTF_8.toString());
+	}
+	
+	/**
+	 * 解密,且经过URLDecoder编码
 	 * 
-	 * @param headerToken token字符串
-	 * @return token内容,json格式
+	 * @return
+	 * @throws UnsupportedEncodingException 
 	 */
-	public JSONObject decrypt(String headerToken) {
+	public JSONObject decryptToken(String headerToken) throws UnsupportedEncodingException {
 		if (StringUtil.isBlank(headerToken)) {
 			throw new AESDecryptException("token is null");
 		}
 		String[] tokens = headerToken.split("\\.");
-		if (tokens.length != 2) {
+		if (tokens.length < 2) {
 			throw new AESDecryptException("token invalid parameter");
 		}
-		// 加密的账号信息
-		String encryptAccount = tokens[0];
+		String encryptAccount = tokens[0];			// 加密的账号信息
 		return this.decryptAccount(encryptAccount);
 	}
 	
 	/**
 	 * 解密
 	 * 
-	 * @param encryptAccount
-	 * @return token内容,json格式
+	 * @throws UnsupportedEncodingException
 	 */
-	public JSONObject decryptAccount(String encryptAccount) {
-		String decryptStr = this.decryptStr(encryptAccount);
+	public JSONObject decryptAccount(String encryptAccount) throws UnsupportedEncodingException {
+		String decryptStr = this.decryptFromBase64(encryptAccount);
 		if (StringUtil.isBlank(decryptStr)) {
 			throw new AESDecryptException("AES decrypt failure");
 		}