国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

手機(jī)號(hào)加解密業(yè)務(wù),通過(guò)aop實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了手機(jī)號(hào)加解密業(yè)務(wù),通過(guò)aop實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

序言:

在開發(fā)過(guò)程中因?yàn)楣δ艿奶厥庑? 需要對(duì)客戶信息的手機(jī)號(hào)進(jìn)行加密處理 然后存到數(shù)據(jù)庫(kù)中,然而這個(gè)需求是項(xiàng)目中期加入,很多功能上已經(jīng)使用了獲取客戶信息的方法,沒法統(tǒng)一控制手機(jī)號(hào)加解密操作, 于是考慮使用 aop做環(huán)繞增強(qiáng) 對(duì)所有出參進(jìn)行,解密操作(這里只對(duì))。

Spring AOP--@Around--使用/實(shí)例 使用或理解上的問(wèn)題

tips: 這里不贅述 注解的含義等基本概念,是以使用@Around為主的新手教程

需要引入jar包

	<!-- #Spring中的切面依賴 -->
	 <dependency>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-aop</artifactId>
	</dependency>

對(duì)于aop 網(wǎng)上有很多的代碼示例,但是有些看不明白、寫得比較含糊的問(wèn)題列一下

問(wèn)題1 @Around中的方法名稱怎么定義:

@Around("test()")? 這個(gè)中的? test()方法是自己定義的切面的方法 必須要通過(guò)@Pointcut指定切面才能生效

// 指定全局的切面
	@Pointcut("execution (* com.dealer.api.controller.*.*(..))")
	public void test() {

	}


// 環(huán)繞增強(qiáng)
	@Around("test()")
	public Object around(ProceedingJoinPoint proceedingJoinPoint) {
		Object proceed = null;
		String className = proceedingJoinPoint.getSignature().getDeclaringTypeName();
		String methodName = proceedingJoinPoint.getSignature().getName();
		System.out.println("============== " + className + " 類中的方法:" + methodName + " 開始執(zhí)行 ==============");
		MethodSignature methodSignature = (MethodSignature) proceedingJoinPoint.getSignature();
		// 參數(shù)名稱
		String[] parameterNames = methodSignature.getParameterNames();
		// 參數(shù)值
		Object[] args = proceedingJoinPoint.getArgs();
		for (int i = 0; i < args.length; i++) {
			System.out.println("第" + i + "個(gè)參數(shù):" + "  key:" + parameterNames[i] + "  value:" + args[i]);
		}

		try {
			proceed = proceedingJoinPoint.proceed();
			// ====================== 返回==============================
			System.out.println("執(zhí)行結(jié)果為:" + proceed);

		} catch (Throwable e) {
			e.printStackTrace();
			System.out.println("執(zhí)行方法發(fā)生了錯(cuò)誤:" + e.getMessage());
			System.out.println("============== " + className + " 類中的方法:" + methodName + " 執(zhí)行結(jié)束 ==============");
			// return setResultError("執(zhí)行方法發(fā)生了錯(cuò)誤:"+e.getMessage());
			return "執(zhí)行方法發(fā)生了錯(cuò)誤:" + e.getMessage();
		}
		System.out.println("============== " + className + " 類中的方法:" + methodName + " 執(zhí)行結(jié)束 ==============");
		return proceed;
	}
匹配規(guī)則使用技巧:

直接在業(yè)務(wù)方法上加@Around 注解定義切面?

定義切面的三種匹配示例

一:?? ?// 指定類增強(qiáng) DealerController 類名? 該類下所有方法增強(qiáng)
?? ?// @Around(value = "execution(* com.*..DealerController.*(..))")

二:
?? ?// 指定方法增強(qiáng) ?testEncrypt 方法名? ?所有叫testEncrypt 名字的方法增強(qiáng)
?? ?// @Around(value = "execution(* com.*..*.testEncrypt(..))")

三: // DealerController 類名? 該類下所有方法后綴為DealerDecryption的方法 增強(qiáng)
?? ?@Around(value = "execution(* com.*..DealerController.*DealerDecryption(..))")

	// 指定類增強(qiáng) DealerController 類名
	// @Around(value = "execution(* com.*..DealerController.*(..))")
	// 指定方法增強(qiáng)  testEncrypt 方法名
	// @Around(value = "execution(* com.*..*.testEncrypt(..))")
	@Around(value = "execution(* com.*..DealerController.*DealerDecryption(..))")
	public Object ReturnDecryption(ProceedingJoinPoint proceedingJoinPoint) {
		Object proceed = null;
//		String className = proceedingJoinPoint.getSignature().getDeclaringTypeName();
//		String methodName = proceedingJoinPoint.getSignature().getName();
//		System.out.println("============== " + className + " 類中的方法:" + methodName + " 開始執(zhí)行 ==============");
//		MethodSignature methodSignature = (MethodSignature) proceedingJoinPoint.getSignature();
//		// 參數(shù)名稱
//		String[] parameterNames = methodSignature.getParameterNames();
//		// 參數(shù)值
//		Object[] args = proceedingJoinPoint.getArgs();
//		for (int i = 0; i < args.length; i++) {
//			System.out.println("第" + i + "個(gè)參數(shù):" + "  key:" + parameterNames[i] + "  value:" + args[i]);
//		}
		
		try {
			proceed = proceedingJoinPoint.proceed();
			
			
			// ====================== 返回==============================
			System.out.println("執(zhí)行結(jié)果為:" + proceed);

		} catch (Throwable e) {
			log.error("=========ReturnDecryption===========",e);
//			System.out.println("執(zhí)行方法發(fā)生了錯(cuò)誤:" + e.getMessage());
//			System.out.println("============== " + className + " 類中的方法:" + methodName + " 執(zhí)行結(jié)束 ==============");
			// return setResultError("執(zhí)行方法發(fā)生了錯(cuò)誤:"+e.getMessage());
			return "執(zhí)行方法發(fā)生了錯(cuò)誤:" + e.getMessage();
		}
//		System.out.println("============== " + className + " 類中的方法:" + methodName + " 執(zhí)行結(jié)束 ==============");
		return proceed;
	}

到這里切面環(huán)繞的功能基本實(shí)現(xiàn)了, 開始進(jìn)入正文對(duì)業(yè)務(wù)參數(shù)加解密。

讀取返回遇到問(wèn)題:

在通過(guò) proceed = proceedingJoinPoint.proceed(); 方法獲取到了對(duì)象后 雖然可以將參數(shù)打印出來(lái)但是無(wú)法修改返回內(nèi)容和結(jié)果,通過(guò)對(duì)象強(qiáng)轉(zhuǎn)的方式甚至無(wú)法獲取內(nèi)容。

解決方式:

1、對(duì)打印的結(jié)果進(jìn)行 json格式化操作,獲取到具體業(yè)務(wù)返回的數(shù)據(jù)

2、返回結(jié)果無(wú)法修改,只能造一個(gè)一樣的返回結(jié)果體返回出去文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-666832.html

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import lombok.extern.slf4j.Slf4j;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cre.dmp.osp.common.response.RestResponse;
import com.Dealer.service.RemoteCallService;
import com.*.base.core.util.StringUtils;

/**
 * Title: WebException.java
 * Description: 環(huán)繞增強(qiáng)  對(duì)客戶信息中手機(jī)號(hào) 做解密操作
 * 
 * @date 2023年7月31日
 */
// 開啟切面注解
@Aspect
// lombok日志注解
@Slf4j
// 注入容器,統(tǒng)一管理
@Component
@SuppressWarnings({ "rawtypes", "unchecked" })
public class AopDecrypt {

    @Autowired
    RemoteCallService remoteCallService;
    
	private static String HANDLE_FIELD_NAME = "mobile"; // 特殊處理字段 TODO

	private static final String ENCRYPT_FLAG = "encrypt"; // 加密標(biāo)識(shí)
															// (判斷對(duì)值進(jìn)行加密或者解密的操作)

	private static final String DECRYPT_FLAG = "decrypt"; // 解密標(biāo)識(shí)(判斷對(duì)值進(jìn)行加密或者解密的操作)
 
	 

	// 指定類增強(qiáng) DealerController 類名
	// @Around(value = "execution(* com.*..DealerController.*(..))")
	// 指定方法增強(qiáng)  testEncrypt 方法名
	// @Around(value = "execution(* com.*..*.testEncrypt(..))")
	@Around(value = "execution(* com.*..DealerController.*DealerDecryption(..))")
	public Object ReturnDecryption(ProceedingJoinPoint proceedingJoinPoint) {
		Object proceed = null;
//		String className = proceedingJoinPoint.getSignature().getDeclaringTypeName();
//		String methodName = proceedingJoinPoint.getSignature().getName();
//		System.out.println("============== " + className + " 類中的方法:" + methodName + " 開始執(zhí)行 ==============");
//		MethodSignature methodSignature = (MethodSignature) proceedingJoinPoint.getSignature();
//		// 參數(shù)名稱
//		String[] parameterNames = methodSignature.getParameterNames();
//		// 參數(shù)值
//		Object[] args = proceedingJoinPoint.getArgs();
//		for (int i = 0; i < args.length; i++) {
//			System.out.println("第" + i + "個(gè)參數(shù):" + "  key:" + parameterNames[i] + "  value:" + args[i]);
//		}
		
		try {
			proceed = proceedingJoinPoint.proceed();
			
			
			ResponseEntity requestParam = (ResponseEntity) proceed;
//			成功 狀態(tài)為200  
			if (requestParam.getStatusCodeValue() == 200) {
//				RestResponse body = (RestResponse)requestParam.getBody();
				String ss =  JSONObject.toJSONString(requestParam);
				 log.info("返回的結(jié)果為:"+JSONObject.toJSONString(requestParam));
				 Object object = JSONObject.parseObject(ss).get("body");
				 Object object2 = JSONObject.parseObject(object.toString()).get("obj") ;
				 
				 Object object3 = JSONObject.parseObject(object2.toString()).get("content") ;
				 if (object3 == null) {
					// 單個(gè)對(duì)象加密 
					 Object changValue = changValue(object2,DECRYPT_FLAG);
					 //  特殊處理數(shù)據(jù)
					 proceed = RestResponse.createSuccessRes(changValue);
				}else{
//					分頁(yè)對(duì)象加密
					// list對(duì)象加密 
					 Object changValue = changValue(object3,DECRYPT_FLAG);
					
					 // 回填參數(shù)
					 JSONObject parseObject = JSON.parseObject(object2.toString());
					 parseObject.put("content", changValue);
					 
					 proceed =RestResponse.createSuccessRes(parseObject);
				}
			} 
			
			// ====================== 返回==============================
			System.out.println("執(zhí)行結(jié)果為:" + proceed);

		} catch (Throwable e) {
			log.error("=========ReturnDecryption===========",e);
//			System.out.println("執(zhí)行方法發(fā)生了錯(cuò)誤:" + e.getMessage());
//			System.out.println("============== " + className + " 類中的方法:" + methodName + " 執(zhí)行結(jié)束 ==============");
			// return setResultError("執(zhí)行方法發(fā)生了錯(cuò)誤:"+e.getMessage());
			return "執(zhí)行方法發(fā)生了錯(cuò)誤:" + e.getMessage();
		}
//		System.out.println("============== " + className + " 類中的方法:" + methodName + " 執(zhí)行結(jié)束 ==============");
		return proceed;
	}

	/***
	 * 
	 * @exception 根據(jù)(map\list)類型區(qū)分對(duì)應(yīng)的解析對(duì)象方法:
	 * @param _obj  內(nèi)容
	 * @param flag  加密解密 標(biāo)識(shí)字段
	 * @throws Exception
	 *             void
	 */
	private Object changValue(Object _obj, String flag) throws Exception {
		// 基本類型不作操作
		if (_obj instanceof Map) {
			changeMapValue(_obj, flag);
		} else if (_obj instanceof List) {
			List<Object> list = (List<Object>) _obj;
			for (Object obj : list) {
				if (obj instanceof Map) {
					changeMapValue(obj, flag);
				} else {
					changObjectValue(obj, flag);
				}
			}
		} else {
			changObjectValue(_obj, flag);
		}
		return _obj;
	}

	/**
	 * 
	 * @exception 解析map 格式的數(shù)據(jù)  找的需要加密的字段:
	 * @param _obj
	 * @param flag	加密解密 標(biāo)識(shí)字段
	 * @return Object
	 * @throws Exception
	 */
	private Object changeMapValue(Object _obj, String flag) throws Exception {
		Map<String, Object> map = (Map<String, Object>) _obj;
		if (map.containsKey(HANDLE_FIELD_NAME)) {
			Object fieldValue = map.get(HANDLE_FIELD_NAME);
			String afterValue = crypto(fieldValue, flag);
			if (StringUtils.isNotBlank(afterValue)) {
				map.put(HANDLE_FIELD_NAME, afterValue);
			}
		}
		return _obj;
	}

	/***
	 * 
	 * @exception 解析對(duì)象內(nèi)容 找到需要加密字段:
	 * @param _obj
	 * @param flag	 加密解密 標(biāo)識(shí)字段
	 * @return
	 * @throws Exception  Object
	 */
	private Object changObjectValue(Object _obj, String flag) throws Exception {
		Class<?> resultClz = _obj.getClass();
		Field[] fieldInfo = resultClz.getDeclaredFields(); // 獲取class里的所有字段
															// 父類字段獲取不到
															// 注:如果出現(xiàn)加密解密失敗
															// 請(qǐng)先查看mobile是否在父類中
		for (Field field : fieldInfo) {
			if (HANDLE_FIELD_NAME.equals(field.getName())) {
				field.setAccessible(true); // 成員變量為private,故必須進(jìn)行此操
				Object fieldValue = field.get(_obj);
				String afterValue = crypto(fieldValue, flag);
				if (StringUtils.isNoneBlank(afterValue)) {
					field.set(_obj, afterValue);
				}else{
					
				}
				break;
			}
		}
		return _obj;
	}
	
    
	/**
	 * 對(duì)特殊字段 進(jìn)行加解密
	 * @param value  加密內(nèi)容
	 * @param flag	加解密方式
	 * @return
	 * @throws Exception
	 */
	private String crypto(Object value, String flag) throws Exception {
		if (value == null) {
			return null;
		}
		// 加密操作;加密之前先去查詢一下數(shù)據(jù)庫(kù) 有沒有 如果沒有 則insert
		if (ENCRYPT_FLAG.equals(flag)) {
			List  e1 = new ArrayList();
	       	e1.add(value);
	   		// 加密
	       	Map<String, String> encrypt = remoteCallService.encrypt(e1);
	       	return encrypt.get(value);
		} else { // 解密操作 通過(guò)seq 查詢 然后解密返回明文
	       	List  e11 = new ArrayList();
	       	e11.add(value);
	        	// 解密
	   		Map<String, String> decrypt = remoteCallService.decrypt(e11);
	   		
	   		String mobile = decrypt.get(value);
	   		String result = ""; 
	   		if (StringUtils.isNoneBlank(mobile)) {
	   			  result = mobile.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
			}else{
				// 解密失敗時(shí)  屏蔽手機(jī)號(hào)
				mobile = value.toString();
				if (mobile.length()==11) {
					result = mobile.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
				}else{
					result =mobile;
				}
			}
	   		
	   		return result;
		}
	}

}

到了這里,關(guān)于手機(jī)號(hào)加解密業(yè)務(wù),通過(guò)aop實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot整合微信小程序登錄獲取手機(jī)號(hào)并解密

    SpringBoot+微信小程序 ?文章目錄: 一、小程序登錄獲取手機(jī)號(hào)的流程 二、pom導(dǎo)入所需的依賴包 三、接收微信小程序的參數(shù) 四、后端發(fā)請(qǐng)求的util工具方法 五、獲取手機(jī)號(hào)的接口 六、請(qǐng)求接口獲取的phone_info信息 1.前端請(qǐng)求getPhoneNumber方法獲取code傳給后端接口; 2.后端接口通過(guò)

    2024年02月09日
    瀏覽(22)
  • 微信手機(jī)號(hào)授權(quán)解密失敗問(wèn)題現(xiàn)象和解決方法: getPhoneNumber

    用uniapp 方式獲取微信手機(jī)號(hào)授權(quán),前后花了很大精力在解決解密手機(jī)號(hào)失敗情況,此處加以說(shuō)明,希望碰到類型情況的網(wǎng)友出坑: button?open-type=\\\"getPhoneNumber\\\"?@getphonenumber=\\\"getPhoneNumber\\\"微信快捷登錄/button 1,第1種解密失敗: 問(wèn)題現(xiàn)象: 第一次解密失敗,第二次成功 解決方法:

    2024年02月12日
    瀏覽(24)
  • 微信小程序中獲取用戶手機(jī)號(hào)密文數(shù)據(jù)解密報(bào)錯(cuò)問(wèn)題

    微信小程序中獲取用戶手機(jī)號(hào)密文數(shù)據(jù)解密報(bào)錯(cuò)問(wèn)題

    微信小程序獲取手機(jī)號(hào),官方通常會(huì)返回密文數(shù)據(jù)給我們,此時(shí)就需要我們自行解密數(shù)據(jù)。在揭秘的數(shù)據(jù)過(guò)程中會(huì)發(fā)現(xiàn),第一次授權(quán)獲取手機(jī)號(hào)會(huì)出現(xiàn)錯(cuò)誤,再次獲取的時(shí)候就能夠正常獲取。 錯(cuò)誤信息一般分兩種: 密文后端解密的 javax.crypto.BadPaddingException: pad block corrupted(后

    2024年02月15日
    瀏覽(19)
  • 使用Spring Boot Security 實(shí)現(xiàn)多認(rèn)證 手機(jī)號(hào)登錄 微信掃碼登錄 微信掃碼注冊(cè)

    使用Spring Boot Security 實(shí)現(xiàn)多認(rèn)證 手機(jī)號(hào)登錄 微信掃碼登錄 微信掃碼注冊(cè)

    Spring Boot 3.x Spring Security 5.7 Spring Redis MyBatis plus 前端 Vue 公司 最近有個(gè)新項(xiàng)目 使用單點(diǎn)登錄 sso 百度了一圈 也沒怎么找到微信掃碼注冊(cè)的功能于是自己寫 需求就是 手機(jī) + 密碼登錄 微信掃碼登錄 微信掃碼注冊(cè) 微信二維碼 登錄 和注冊(cè)二合一 具體實(shí)現(xiàn) 稍后我會(huì)說(shuō) 本教程將指導(dǎo)

    2024年04月10日
    瀏覽(26)
  • 如何通過(guò)QQ進(jìn)行手機(jī)號(hào)溯源

    如何通過(guò)QQ進(jìn)行手機(jī)號(hào)溯源

    Q綁在線查詢: http://2k.24kz.cn/ 如果上述的網(wǎng)址查詢不到信息的號(hào)。會(huì)提示說(shuō)沒有找到 可能說(shuō)明數(shù)據(jù)庫(kù)中并無(wú)該qq號(hào)所綁定手機(jī)號(hào)的信息 開始正題: 第一步:點(diǎn)擊添加賬號(hào),復(fù)制其QQ賬號(hào)進(jìn)入點(diǎn)擊忘記密碼,便可查看其手機(jī)前3位以及后兩位 輸入賬號(hào) 下一步 第二步:使用查詢

    2024年02月06日
    瀏覽(21)
  • 通過(guò)蜜罐技術(shù)獲取攻擊者手機(jī)號(hào)、微信號(hào)【網(wǎng)絡(luò)安全】

    通過(guò)蜜罐技術(shù)獲取攻擊者手機(jī)號(hào)、微信號(hào)【網(wǎng)絡(luò)安全】

    相關(guān)聲明: 以下內(nèi)容僅限用于紅藍(lán)攻防對(duì)抗等專業(yè)領(lǐng)域,請(qǐng)勿用于非法用途。 首先,我們先講一下蜜罐的概念,你可以簡(jiǎn)單理解較為蜜罐就是一個(gè)陷阱,故意暴露一些我們?nèi)藶樵O(shè)計(jì)好的漏洞,讓攻擊者自投羅網(wǎng)。 蜜罐是對(duì)攻擊者的欺騙技術(shù),用以監(jiān)視、檢測(cè)、分析和溯源攻

    2024年02月12日
    瀏覽(14)
  • Java獲取微信小程序code獲取openid、session_key、unionid,獲取授權(quán)信息解密獲取手機(jī)號(hào)

    WechatUtils (具體實(shí)體類自己根據(jù)自己的業(yè)務(wù)需求配置就行) service impl實(shí)現(xiàn)類 ??這個(gè)代碼已經(jīng)可以解析出code信息,具體的業(yè)務(wù)流程自己去添加就ok 還是我們之前的WechatUtils,在里面添加getPhone方法 service impl實(shí)現(xiàn)類 ??以上就是本次的筆記了,大家有需要用的自取,有用記得點(diǎn)個(gè)贊

    2024年02月16日
    瀏覽(22)
  • uni-app微信小程序獲取手機(jī)號(hào)授權(quán)登錄(復(fù)制即用,js完成敏感數(shù)據(jù)對(duì)稱解密,無(wú)需走服務(wù)端處理)

    uni-app微信小程序獲取手機(jī)號(hào)授權(quán)登錄(復(fù)制即用,js完成敏感數(shù)據(jù)對(duì)稱解密,無(wú)需走服務(wù)端處理)

    目錄 一、示例 二、具體實(shí)現(xiàn)說(shuō)明 獲取到的手機(jī)號(hào) 屬性說(shuō)明 屬性名 說(shuō)明 生效時(shí)機(jī) @getphonenumber 獲取用戶手機(jī)號(hào)回調(diào) open-type=\\\"getPhoneNumber\\\" ?按鈕寫法 接口說(shuō)明 接口 說(shuō)明 wx.login() 獲取登錄憑證(code),通過(guò)憑證進(jìn)而換取用戶登錄態(tài)信息 auth.code2Session 登錄憑證校驗(yàn) 參數(shù)說(shuō)明

    2024年02月10日
    瀏覽(46)
  • 微信小程序 - 實(shí)現(xiàn)手機(jī)號(hào)登錄--授權(quán)并獲取手機(jī)號(hào)保存至本地

    微信小程序 - 實(shí)現(xiàn)手機(jī)號(hào)登錄--授權(quán)并獲取手機(jī)號(hào)保存至本地

    微信官方文檔 | 獲取手機(jī)號(hào) 這是服務(wù)端的 ?這是我們前端獲取手機(jī)號(hào)需要給接口傳遞的兩個(gè)參數(shù) ? ?注意: 參數(shù)一: 獲取access_token需要用到小程序密鑰,這個(gè)需要從 服務(wù)端獲取 ,也就是需要請(qǐng)求后端接口獲取access_token,千萬(wàn)不要將小程序密鑰寫在前端代碼中, 必須 要從服

    2024年02月03日
    瀏覽(34)
  • uniapp實(shí)現(xiàn)手機(jī)號(hào)一鍵登錄功能

    uniapp實(shí)現(xiàn)手機(jī)號(hào)一鍵登錄功能

    1,第一步 2,第二步 創(chuàng)建應(yīng)用要和項(xiàng)目uni-appid一致。 3,第三步 4,第四步 5,第五步 6,第六步 7,第七步 8,第八步 (實(shí)現(xiàn)代碼) 一建登錄步驟到此結(jié)束,歡迎大家討論和指導(dǎo),登錄彈窗本文設(shè)置的是全屏‘fullScreen’,大家可根據(jù)需求編輯,彈窗只能在手機(jī)端app才能顯示。

    2024年02月16日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包