网站忘记备案,做广告的软件app有哪些,python做视频点播网站,银行网站建设方案视频背景
在实际开发过程中#xff0c;我们通常会涉及到数据加密的问题。本文重点探讨两个方面#xff1a;一是外部接口调用时的数据加密#xff0c;二是服务间调用的数据加密与解密。
对于外部接口调用#xff0c;每个用户将拥有独立的动态 AES 加密密钥#xff08;KEY我们通常会涉及到数据加密的问题。本文重点探讨两个方面一是外部接口调用时的数据加密二是服务间调用的数据加密与解密。
对于外部接口调用每个用户将拥有独立的动态 AES 加密密钥KEY和初始向量IV。在用户每次重新登录后系统会重新生成 KEY 和 IV以保证调用端的唯一性。这种机制不仅提高了数据传输的安全性还能有效限制非法调用。
对于服务间的调用我们则采用系统级的 KEY 和 IV 对 API 调用的数据进行加密和解密。这种方式适用于系统内部的安全保障确保服务间通信的可靠性和安全性。
通过上述两种方式我们能够满足不同场景下的加密需求同时有效提升系统的安全性和调用端的独特性。
注解类
通常用在controller上上面用到了枚举用来标识接口的加密方式默认为系统加密码因为一开始是准备用于服务间调用的。
Target({ElementType.METHOD})
Retention(RetentionPolicy.RUNTIME)
Documented
Indexed
public interface ApiEncrypt {//加密方式ApiEncryptType encryptType() default ApiEncryptType.BY_SYSTEM;}
AOP类
在 AOP 的 doAfter 方法中对结果进行拦截和输出是常见的操作。如果您对其实现原理感兴趣可以查阅相关资料以深入了解。
其中核心的加解密功能主要由 ApiEncryptUtil 类实现。以下是相关的代码片段
Aspect
Slf4j
public class ApiEncryptAspect {Pointcut(annotation(com.unknow.first.api.encrypt.annotation.ApiEncrypt))public void apiEncryptPointcut() {}AfterReturning(value apiEncryptPointcut(), returning result)public void after(JoinPoint joinPoint, CommonApiResultObject result) throws Throwable {Signature signature joinPoint.getSignature();MethodSignature msg (MethodSignature) signature;//获取注解标注的方法Method method joinPoint.getTarget().getClass().getMethod(msg.getName(), msg.getParameterTypes());//通过方法获取注解final ApiEncrypt apiEncrypt method.getAnnotation(ApiEncrypt.class);ApiEncryptUtil.encryptData(result, apiEncrypt.encryptType());}
}
示例代码 GetMapping(/api/encrypt/user)ApiOperation(api加密-用户密钥加密)ApiEncrypt(encryptType BY_USER)SystemResource(authMethod AuthMethod.ALLSYSTEMUSER)public CommonApiResultObject testEncryptByUserKey() {MapString, Object value new HashMap();value.put(test1, 测试1);value.put(test2, 测试2);return CommonApiResult.createSuccessResult(value);}
总结
这种加密方式在一定程度上模拟了云平台中 AK/SK 机制的加密模式但与其不同的是我们的 AK/SK 是动态生成的。这主要是基于外部对接用户的特点考虑到会话通常持续时间较长因此动态生成的 AK/SK 不会快速过期同时也能够有效确保会话终端的唯一性。
未来我们计划进一步扩展功能允许为外部调用用户配置固定的 AK/SK以满足特定场景下的需求。以下是相关代码参考
GitCode - 全球开发者的开源社区,开源代码托管平台GitCode是面向全球开发者的开源社区,包括原创博客,开源代码托管,代码协作,项目管理等。与开发者社区互动,提升您的研发效率和质量。https://gitcode.com/YouYouLongLong/springcloud-framework/tree/master/core-common-parent/api-encrypt-common