From b89fc7c55c756e71d5c5133a799430c294059be1 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期五, 15 九月 2023 08:47:53 +0800
Subject: [PATCH] 代码提交

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/PasswordFreeLoginServiceImpl.java |  108 ++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 85 insertions(+), 23 deletions(-)

diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/PasswordFreeLoginServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/PasswordFreeLoginServiceImpl.java
index 9d619a3..9385ed8 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/PasswordFreeLoginServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/PasswordFreeLoginServiceImpl.java
@@ -1,23 +1,28 @@
 package com.vci.ubcs.code.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.vci.ubcs.code.config.HeaderMapRequestWrapper;
+import com.vci.ubcs.code.entity.TokenUserObject;
 import com.vci.ubcs.code.service.IPasswordFreeLoginService;
 import com.vci.ubcs.code.util.HttpUtils;
-import org.apache.commons.collections4.MultiValuedMap;
-import org.apache.commons.collections4.multimap.ArrayListValuedHashMap;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.tool.utils.Func;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.client.ServiceInstance;
 import org.springframework.cloud.client.discovery.DiscoveryClient;
-import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
-import org.springframework.http.HttpMethod;
-import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 /**
@@ -31,12 +36,18 @@
 	// 閫氳繃鏈嶅姟娉ㄥ唽涓績鑾峰彇缃戝叧鐨勭鍙e彿
 	@Autowired
 	private DiscoveryClient discoveryClient;
+	@Value("${user-info.pwd-free-tenant-id}")
+	private String pwdFreeTenantId;
+	@Autowired
+	private BladeRedis bladeRedis;
+	// 缂撳瓨鍚�
+	public static final String PWD_FREE_LOGIN_TOKEN = "pwdFreeLogin:Token:";
 
 	/**
 	 * 鑾峰彇缃戝叧绔彛
 	 * @return
 	 */
-	public String getGatewayPort() {
+	private String getGatewayPort() {
 		List<ServiceInstance> instances = discoveryClient.getInstances("ubcs-gateway");
 		if (!instances.isEmpty()) {
 			ServiceInstance gatewayInstance = instances.get(0);
@@ -46,41 +57,92 @@
 	}
 
 	/**
-	 * 鍏嶅瘑鐧诲綍
+	 * 鍏嶅瘑鐧诲綍骞跺瓨鍏ョ紦瀛橈紝閰嶅悎杩囨护鍣ㄥ啓娉�
 	 * @param username 璐﹀彿
 	 * @return
 	 */
 	@Override
-	public boolean passwordFreeLogin(String username) {
+	public String passwordFreeLogin(String username, ServletRequest servletRequest) {
 		// 鍏嶅瘑鐧诲綍鎺ュ彛鍦板潃
-		String loginUrl = "http://localhost:"+this.getGatewayPort()+"/ubcs-auth/oauth/password-free-login";
-
+		String loginUrl = "http://localhost:"+this.getGatewayPort()+"/ubcs-auth/oauth/token";
+		// 璇锋眰鏉ヨ嚜宸卞摢涓猧p鍦板潃
+		HttpServletRequest request = (HeaderMapRequestWrapper) servletRequest;
+		String ipAddr = request.getRemoteAddr();
+		// 鍏堝皾璇曚粠缂撳瓨褰撲腑鍙栵紝濡傛灉涓嶅瓨鍦ㄥ氨鐧诲綍
+		String redisToken = (String)bladeRedis.get(PWD_FREE_LOGIN_TOKEN+ipAddr);
+		if(Func.isNotBlank(redisToken)){
+			// 缂撳瓨涓凡缁忓瓨鍦ㄥ氨鐩存帴鍒犻櫎璇ョ紦瀛橈紝涓昏涓轰簡閬垮厤缁熶竴ip涓嬪瓨鍦ㄥ涓猼oken鐨勬儏鍐�
+			bladeRedis.del(PWD_FREE_LOGIN_TOKEN+ipAddr);
+		}
+		// 涓嶅瓨鍦ㄥ氨閲嶆柊鑾峰彇token
 		// 璁剧疆璇锋眰澶�
 		HttpHeaders headers = new HttpHeaders();
 		headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
 		headers.set("Authorization", "Basic c3dvcmQ6c3dvcmRfc2VjcmV0");
-		headers.set("Tenant-Id", "000000");
+		headers.set("Tenant-Id", pwdFreeTenantId);
 
 		//璁剧疆璇锋眰浣撳弬鏁�
 		MultiValueMap<String,String> parameters = new LinkedMultiValueMap<String,String>();
 		parameters.add("username",username);
-		parameters.add("grant_type", "captcha");
+		parameters.add("grant_type", "passwordfree");
 		parameters.add("scope", "all");
 		parameters.add("type", "account");
 
 		// 鍙戦�丳OST璇锋眰
 		String responseBody = HttpUtils.post(loginUrl, parameters,headers);
-		System.out.println(responseBody);
-		//鎷垮埌鍝嶅簲浣撳皢token瀛樺叆鍒皉edis涓紝浠ccount浣滀负瀛樺偍鐨刱ey
-
-		// 瑙f瀽鍝嶅簲浣撹幏鍙栦护鐗�
-		// 杩欓噷鍋囪鍝嶅簲浣撴槸JSON鏍煎紡锛屽寘鍚竴涓悕涓�"token"鐨勫瓧娈�
-		// 鏍规嵁瀹為檯鎯呭喌杩涜瑙f瀽
-		// JSONObject json = new JSONObject(responseBody);
-		// String token = json.getString("token");
-
-		return false;
+		//鎷垮埌鍝嶅簲浣撳叾涓寘鍚玹oken,鐢╮equest涓殑ip鍦板潃浣滀负閿�硷紝灏唗oken瀛樺叆缂撳瓨
+		TokenUserObject tokenUserObject = null;
+		try {
+			tokenUserObject = JSON.parseObject(responseBody, TokenUserObject.class);
+		}catch (Exception e){
+			throw new ServiceException("responseBody杞崲TokenUserObject澶辫触:"+e.getMessage());
+		}
+		// 灏唗oken瀛樺叆缂撳瓨褰撲腑,杩囨湡鏃堕棿涓�24灏忔椂
+		bladeRedis.setEx(PWD_FREE_LOGIN_TOKEN+ipAddr,"bearer "+tokenUserObject.getAccess_token(),60*60*60*24L);
+		return responseBody;
 	}
 
+	/**
+	 * 鍏嶅瘑鐧诲綍锛屾敼鍙樺綋鍓峸ebservice璇锋眰鐨刪eader
+	 * @param username 璐﹀彿
+	 * @return
+	 */
+	@Override
+	public boolean passwordFreeLogin2(String username, HttpServletRequest servletRequest) {
+		// 鍏嶅瘑鐧诲綍鎺ュ彛鍦板潃
+		String loginUrl = "http://localhost:"+this.getGatewayPort()+"/ubcs-auth/oauth/token";
+
+		// 鑾峰彇token锛屽厛璁剧疆璇锋眰澶�
+		HttpHeaders headers = new HttpHeaders();
+		headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+		headers.set("Authorization", "Basic c3dvcmQ6c3dvcmRfc2VjcmV0");
+		headers.set("Tenant-Id", pwdFreeTenantId);
+		//璁剧疆璇锋眰浣撳弬鏁�
+		MultiValueMap<String,String> parameters = new LinkedMultiValueMap<String,String>();
+		parameters.add("username",username);
+		parameters.add("grant_type", "passwordfree");
+		parameters.add("scope", "all");
+		parameters.add("type", "account");
+		// 鍙戦�丳OST璇锋眰
+		String responseBody = HttpUtils.post(loginUrl, parameters,headers);
+		//鎷垮埌鍝嶅簲浣撳叾涓寘鍚玹oken,鐢╮equest涓殑ip鍦板潃浣滀负閿�硷紝灏唗oken瀛樺叆缂撳瓨
+		TokenUserObject tokenUserObject = null;
+		try {
+			tokenUserObject = JSON.parseObject(responseBody, TokenUserObject.class);
+		}catch (Exception e){
+			throw new ServiceException("responseBody杞崲TokenUserObject澶辫触:"+e.getMessage());
+		}
+		HttpServletRequest request = (HeaderMapRequestWrapper) servletRequest;
+		HeaderMapRequestWrapper requestWrapper = new HeaderMapRequestWrapper(request);
+
+		//璁剧疆褰撳墠web鎺ュ彛鐨勮姹傚ご
+		String token = "bearer " + tokenUserObject.getAccess_token();
+		// 灏唗oken璁剧疆鍒癶eader涓�
+		requestWrapper.setHeader("Blade-Auth", token);
+		requestWrapper.setHeader("Authorization","Basic c3dvcmQ6c3dvcmRfc2VjcmV0");
+
+		// 灏唗oken瀛樺叆缂撳瓨褰撲腑,杩囨湡鏃堕棿涓�24灏忔椂
+		return true;
+	}
 
 }

--
Gitblit v1.9.3