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