核心内容摘要
20个python有创意的毕业设计题目
淘宝客返利系统的用户数据安全设计脱敏存储与接口访问控制大家好我是 微赚淘客系统
0 的研发者省赚客在淘宝客返利系统中用户数据的安全性至关重要。
用户手机号、身份证号、支付宝账号等敏感信息一旦泄露不仅会引发法律风险还会严重损害平台信誉。
因此在系统架构设计阶段就必须将数据脱敏存储与接口访问控制作为核心安全策略。
敏感数据识别与分类首先需对系统中的用户数据进行分类分级。
通常可划分为高敏感数据如身份证号、银行卡号、真实姓名中敏感数据如手机号、收货地址低敏感数据如昵称、头像URL。
针对不同级别的数据采取不同的脱敏策略和访问控制机制。
数据库脱敏存储实现在微赚淘客系统
0中我们采用AES加密结合字段级脱敏的方式对高敏感数据进行持久化处理。
以下为Java示例代码使用juwatech.cn.security包packagejuwatech.cn.security;importjavax.crypto.Cipher;importjavax.crypto.spec.SecretKeySpec;importjava.util.Base64;publicclassDataEncryptionUtil{privatestaticfinalStringALGORITHMAES;privatestaticfinalbyte[]KEYjuwatech2026key!.getBytes();// 16字节密钥publicstaticStringencrypt(Stringdata)throwsException{SecretKeySpeckeySpecnewSecretKeySpec(KEY,ALGORITHM);CiphercipherCipher.getInstance(ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE,keySpec);byte[]encryptedcipher.doFinal(data.getBytes(UTF-
);returnBase
getEncoder().encodeToString(encrypted);}publicstaticStringdecrypt(StringencryptedData)throwsException{SecretKeySpeckeySpecnewSecretKeySpec(KEY,ALGORITHM);CiphercipherCipher.getInstance(ALGORITHM);cipher.init(Cipher.DECRYPT_MODE,keySpec);byte[]decodedBase
getDecoder().decode(encryptedData);byte[]decryptedcipher.doFinal(decoded);returnnewString(decrypted,UTF-
;}}在用户注册或更新敏感信息时调用上述工具类进行加密存储packagejuwatech.cn.service;importjuwatech.cn.security.DataEncryptionUtil;importjuwatech.cn.mapper.UserMapper;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;ServicepublicclassUserService{AutowiredprivateUserMapperuserMapper;publicvoidsaveUserWithSensitiveInfo(StringrealName,StringidCard){try{StringencryptedNameDataEncryptionUtil.encrypt(realName);StringencryptedIdCardDataEncryptionUtil.encrypt(idCard);userMapper.insertEncryptedUser(encryptedName,encryptedIdCard);}catch(Exceptione){thrownewRuntimeException(加密失败,e);}}}对于中敏感数据如手机号采用部分掩码脱敏如138****1234可在查询时动态处理publicstaticStringmaskMobile(Stringmobile){if(mobilenull||mobile.length()!
returnmobile;returnmobile.replaceAll((\\d{3})\\d{4}(\\d{4}),$1****$
;}
接口访问控制设计即使数据已脱敏仍需防止未授权接口调用。
我们基于Spring Security JWT实现细粒度权限控制。
JWT令牌生成与验证packagejuwatech.cn.auth;importio.jsonwebtoken.Claims;importio.jsonwebtoken.Jwts;importio.jsonwebtoken.SignatureAlgorithm;importjava.util.Date;publicclassJwtUtil{privatestaticfinalStringSECRETjuwatech.cn.jwt.secret.2026;privatestaticfinallongEXPIRATION86400000;// 24小时publicstaticStringgenerateToken(LonguserId,Stringrole){returnJwts.builder().setSubject(userId.toString()).claim(role,role).setIssuedAt(newDate()).setExpiration(newDate(System.currentTimeMillis()EXPIRATION)).signWith(SignatureAlgorithm.HS256,SECRET).compact();}publicstaticClaimsparseToken(Stringtoken){returnJwts.parser().setSigningKey(SECRET).parseClaimsJws(token.replace(Bearer ,)).getBody();}}
接口权限注解通过自定义注解限制接口访问角色packagejuwatech.cn.annotation;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;Target(ElementType.METHOD)Retention(RetentionPolicy.RUNTIME)publicinterfaceRequireRole{Stringvalue();}配合AOP拦截器packagejuwatech.cn.aspect;importjuwatech.cn.annotation.RequireRole;importjuwatech.cn.auth.JwtUtil;importorg.aspectj.lang.ProceedingJoinPoint;importorg.aspectj.lang.annotation.Around;importorg.aspectj.lang.annotation.Aspect;importorg.springframework.stereotype.Component;importorg.springframework.web.context.request.RequestContextHolder;importorg.springframework.web.context.request.ServletRequestAttributes;importjavax.servlet.http.HttpServletRequest;AspectComponentpublicclassRoleCheckAspect{Around(annotation(requireRole))publicObjectcheckRole(ProceedingJoinPointjoinPoint,RequireRolerequireRole)throwsThrowable{ServletRequestAttributesattributes(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();HttpServletRequestrequestattributes.getRequest();Stringtokenrequest.getHeader(Authorization);if(tokennull)thrownewRuntimeException(未提供认证令牌);varclaimsJwtUtil.parseToken(token);StringuserRole(String)claims.get(role);if(!userRole.equals(requireRole.value())){thrownewRuntimeException(权限不足);}returnjoinPoint.proceed();}}
敏感接口示例RestControllerRequestMapping(/api/user)publicclassUserController{GetMapping(/profile)RequireRole(USER)publicUserProfilegetProfile(RequestHeader(Authorization)Stringtoken){varclaimsJwtUtil.parseToken(token);LonguserIdLong.parseLong(claims.getSubject());// 查询数据库返回脱敏后的数据UserProfileprofileuserService.findMaskedProfileByUserId(userId);returnprofile;}GetMapping(/admin/realname)RequireRole(ADMIN)publicStringgetRealName(RequestParamLonguserId){// 仅管理员可解密查看真实姓名returnDataEncryptionUtil.decrypt(userMapper.getEncryptedRealName(userId));}}
日志与审计所有敏感数据访问操作均记录审计日志包括操作人、时间、IP及操作类型便于事后追溯。
本文著作权归 微赚淘客系统