dcs hai 3 semanas
pai
achega
8eb2a6baa9

+ 20 - 4
virgo.core/src/main/java/com/bosshand/virgo/core/service/MgrUserService.java

@@ -3,10 +3,7 @@ package com.bosshand.virgo.core.service;
 import com.alibaba.fastjson.JSONObject;
 import com.bosshand.virgo.core.dao.*;
 import com.bosshand.virgo.core.model.*;
-import com.bosshand.virgo.core.utils.CodeCache;
-import com.bosshand.virgo.core.utils.StringUtil;
-import com.bosshand.virgo.core.utils.Utils;
-import com.bosshand.virgo.core.utils.WeChatUtil;
+import com.bosshand.virgo.core.utils.*;
 import com.bosshand.virgo.exception.Constant;
 import com.bosshand.virgo.exception.ServiceException;
 import org.apache.shiro.subject.Subject;
@@ -140,6 +137,25 @@ public class MgrUserService {
 		return str;
 	}
 
+	/**
+	 * 获取商场后台token
+	 */
+	public String getShopToken() {
+		String password = null;
+		try {
+			password = CryptUtil.encrypt("admin");
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		String url = "https://www.workark.com/prod-api/admin-api/account/login" + "?username=admin&password=" + password;
+		JSONObject js = new JSONObject();
+		String str = WeChatUtil.httpPost(url, js, null);
+		if (StringUtil.notBlank(str)) {
+			return JSONObject.parseObject(str).getJSONObject("data").getString("token");
+		}
+		return "商场服务异常!";
+	}
+
 	public void delete(int userId) {
 		mgrUserDao.delete(userId);
 	}

+ 16 - 0
virgo.core/src/main/java/com/bosshand/virgo/core/shiro/VirgoAuthenticationFilter.java

@@ -52,6 +52,16 @@ public class VirgoAuthenticationFilter extends AuthenticatingFilter {
 		this.wxJson = null;
 	}
 
+	private String shopToken = null;
+
+	private void initShopToken(String shopToken) {
+		this.shopToken = shopToken;
+	}
+
+	private void releaseShopToken() {
+		this.shopToken = null;
+	}
+
 	@Override
 	protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) throws Exception {
 		String phone = null;
@@ -108,6 +118,8 @@ public class VirgoAuthenticationFilter extends AuthenticatingFilter {
 			// 超级管理员登录
 			if (CodeCache.DefaultPhone.contains(dto.getPhone())) {
 				CodeCache.setKey(dto.getPhone(), CodeCache.DefaultPhoneCode);
+				// 登录商城后台
+				initShopToken(mgrUserService.getShopToken());
 				return createToken(dto.getPhone(), CodeCache.DefaultPhoneCode, request, response);
 			}
 
@@ -154,6 +166,10 @@ public class VirgoAuthenticationFilter extends AuthenticatingFilter {
 			} else {
 				Map<String, String> map = new HashMap<String, String>();
 				map.put("token", subject.getSession().getId().toString());
+				if (shopToken != null) {
+					map.put("shopToken", shopToken);
+					releaseShopToken();
+				}
 				response.getWriter().write(JSON.toJSONString(Response.ok(map)));
 			}
 		}

+ 109 - 0
virgo.core/src/main/java/com/bosshand/virgo/core/utils/CryptUtil.java

@@ -0,0 +1,109 @@
+package com.bosshand.virgo.core.utils;
+
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
+
+/**
+ * 加密工具类
+ * @author  enilu
+ */
+public class CryptUtil {
+	//使用AES-128-CBC加密模式,key需要为16位,
+	public static final String KEY = "v80v8g2ta05rrg2k";
+	private static String IV = "6gycoeef15nql8ab";
+
+	public static String encodeBASE64(byte[] bytes) {
+		String encode = Base64.getEncoder().encodeToString(bytes);
+		encode = encode.replaceAll("\n", "");
+		return encode;
+	}
+
+
+	/**
+	 * 加密方法
+	 *
+	 * @param data 要加密的数据
+	 * @param key  加密key
+	 * @param iv   加密iv
+	 * @return 加密的结果
+	 * @throws Exception
+	 */
+	public static String encrypt(String data, String key, String iv) throws Exception {
+		try {
+
+			Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");//"算法/模式/补码方式"NoPadding PkcsPadding
+			int blockSize = cipher.getBlockSize();
+
+			byte[] dataBytes = data.getBytes();
+			int plaintextLength = dataBytes.length;
+			if (plaintextLength % blockSize != 0) {
+				plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));
+			}
+
+			byte[] plaintext = new byte[plaintextLength];
+			System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);
+
+			SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
+			IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
+
+			cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
+			byte[] encrypted = cipher.doFinal(plaintext);
+
+			return Base64.getEncoder().encodeToString(encrypted);
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			return null;
+		}
+	}
+
+	/**
+	 * 解密方法
+	 *
+	 * @param data 要解密的数据
+	 * @param key  解密key
+	 * @param iv   解密iv
+	 * @return 解密的结果
+	 * @throws Exception
+	 */
+	public static String desEncrypt(String data, String key, String iv) throws Exception {
+
+		byte[] encrypted1 = Base64.getDecoder().decode(data);
+
+		Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
+		SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");
+		IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes(StandardCharsets.UTF_8));
+		cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);
+		byte[] original = cipher.doFinal(encrypted1);
+		String originalString = new String(original, StandardCharsets.UTF_8);
+		return originalString.trim();
+
+	}
+
+	/**
+	 * 使用默认的key和iv加密
+	 *
+	 * @param data
+	 * @return
+	 * @throws Exception
+	 */
+	public static String encrypt(String data) throws Exception {
+		return encrypt(data, KEY, IV);
+	}
+
+	/**
+	 * 使用默认的key和iv解密
+	 *
+	 * @param data
+	 * @return
+	 * @throws Exception
+	 */
+	public static String desEncrypt(String data) throws Exception {
+		return desEncrypt(data, KEY, IV);
+	}
+
+}