当前位置: 首页 > wzjs >正文

动漫做羞羞的网站推广宣传

动漫做羞羞的网站,推广宣传,网站投票怎么做,跟犀牛云一样做网站的一、背景 在给第三方提供接口时,我们需要对接口进行验签。具体来说,当外部系统调用我们的接口时,请求中需要携带一个签名,我们接收到请求后,会解析数据并校验签名是否正确,以确保请求的合法性和安全性。 为了在不同项目中方便地使用这一功能,我们将签名校验规则封装成一…

一、背景

在给第三方提供接口时,我们需要对接口进行验签。具体来说,当外部系统调用我们的接口时,请求中需要携带一个签名,我们接收到请求后,会解析数据并校验签名是否正确,以确保请求的合法性和安全性。

为了在不同项目中方便地使用这一功能,我们将签名校验规则封装成一个工具包。使用方只需通过简单的注解即可轻松集成验签功能,无需重复编写验签逻辑,从而提高开发效率并确保一致性。

二、实现原理

  1. 使用AOP来拦截方法
  2. 获取参数值进行组装、校验签名是否一致

三、设计思路

通过俩个注解进行标记所需要进行验签的方法

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SignatureChecker {// 服务CodeString serviceCode() default SignatureConst.EMPTY_STR;// 签名生成密钥String secretKey() default SignatureConst.EMPTY_STR;// 签名过期时间,单位为分钟int expireMinutes() default -1;// 默认为true,表示需要验证签名boolean required() default true;// 返回值类型String returnType() default SignatureConst.DEFAULT_RETURN_TYPE;}

serviceCode:服务编码,进行区分不同的服务/业务
secretKey:双方约定好的密钥,进行生成签名,可以写在配置文件中。
expireMinutes:标识签名有效时长,默认5分钟,可以配置文件中进行全局修改。

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface SignatureParam {// 0:标识serviceCode 1:标识请求参数SignatureParamTypeEnum type() default SignatureParamTypeEnum.PARAMS;String requestIdField() default SignatureConst.EMPTY_STR;String timestampField() default SignatureConst.EMPTY_STR;String signatureField() default SignatureConst.EMPTY_STR;}

对于不同的请求实体,可能对应的字段名不相同,所以我们需要使用一个注解进行标注当前实体验签字段的名称。

当签名字段发生变化时,可以使用requestIdField、timestampField、signatureField 字段进行指定。

四、代码

4.1 代码结构

4.2 详细代码

4.2.1 SignatureChecker.class
import org.tao.consts.SignatureConst;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SignatureChecker {// 服务CodeString serviceCode() default SignatureConst.EMPTY_STR;// 签名生成密钥String secretKey() default SignatureConst.EMPTY_STR;// 签名过期时间,单位为分钟int expireMinutes() default -1;// 默认为true,表示需要验证签名boolean required() default true;// 返回值类型String returnType() default SignatureConst.DEFAULT_RETURN_TYPE;}
4.2.2 SignatureParam.class
import org.tao.consts.SignatureConst;
import org.tao.enums.SignatureParamTypeEnum;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface SignatureParam {// 0:标识serviceCode 1:标识请求参数SignatureParamTypeEnum type() default SignatureParamTypeEnum.PARAMS;String requestIdField() default SignatureConst.EMPTY_STR;String timestampField() default SignatureConst.EMPTY_STR;String signatureField() default SignatureConst.EMPTY_STR;}
4.2.3 SignatureAspect.class

import com.alibaba.fastjson2.JSON;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.tao.anno.SignatureChecker;
import org.tao.anno.SignatureParam;
import org.tao.config.SignatureProperties;
import org.tao.consts.SignatureConst;
import org.tao.enums.SignatureParamTypeEnum;
import org.tao.exception.SignatureValidationException;
import org.tao.utils.SignatureUtil;import javax.annotation.Resource;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.Map;@Aspect
@Component
public class SignatureAspect {private static final Logger logger = LoggerFactory.getLogger(SignatureAspect.class);@Resourceprivate SignatureProperties signatureProperties;@Around("@annotation(org.tao.anno.SignatureChecker) " +"&& (@annotation(org.springframework.web.bind.annotation.PostMapping) || @annotation(org.springframework.web.bind.annotation.RequestMapping))")public Object validateSignature(ProceedingJoinPoint joinPoint) throws Throwable {MethodSignature signature = (MethodSignature) joinPoint.getSignature();Method method = signature.getMethod();Map<String, Object> paramMap = null;String serviceCode = null;Object[] args = joinPoint.getArgs();Annotation[][] parameterAnnotations = method.getParameterAnnotations();SignatureChecker s
http://www.dtcms.com/wzjs/479279.html

相关文章:

  • 西安高校定制网站建设公司推荐成品网站源码在线看
  • wordpress divi 悬浮青海seo技术培训
  • 婚纱网站设计目标网络平台推广方案
  • 做网站页面seo整站优化更能准确获得客户
  • 涉县移动网站建设价格链接提取视频的网站
  • 网页预览手机网站效果北京债务优化公司
  • 做网站发布信息全球网站流量查询
  • 国外购买域名的网站推广方案有哪些
  • 西安做营销型网站建设2022年新闻热点摘抄
  • 为什么做这个网站反馈问题5118关键词工具
  • 婚纱手机网站制作佛山seo技术
  • 深圳的网站建设公司seo整体优化步骤怎么写
  • 广东省建设工程监督站官方网站电脑优化大师
  • 绵阳住房和城乡建设部网站b2b电子商务平台网站
  • 徐州百度竞价排名关键词怎么优化到百度首页
  • 网站建设凡科关键词排名优化报价
  • 网站建设 python网络营销师是干什么的
  • 出口退税在哪个网站做百度推广怎么收费
  • 气血不足做网站seo网站推广收费
  • 陕西省高速集团建设网站个人博客网页制作
  • 发布课程的网站模板百度框架户开户渠道
  • 河北公司网站制作设计淘宝搜索关键词技巧
  • 做网站php和asp哪个好泉州百度搜索推广
  • 深圳哪些设计公司做网站比较出名成都seo优化外包公司
  • 兼职做美工摄影去哪个网站酒店如何进行网络营销
  • 如何使用表格做网站百度竞价推广流程
  • 网络推广 SEO优化 网站建设百度关键词seo年度费用
  • 网站公司怎么做软件开发公司排行榜
  • 杭州做网站的公司哪家好线上营销策略有哪些
  • 怎样做app网站建设江门网站建设模板