API接口AOP验签

2019-11-19  本文已影响0人  炒面Z

对外API支持APP Key 授权鉴权方案

第三方调用对外API,首先需要先申请appKey和appSecret,随后调用api接口的时候需要携带appKey,并使用appSecret加密其他参数生成签名sign,最后服务端验证sign签名合法性

appKey:公匙(相当于账号)
appSecret:私匙(相当于密码)

1.xxx CRM端:

新增一个app key鉴权信息维护模块,可维护AppKey,AppSecret等信息

2.API接口端

3.流程图


image.png

4.代码,java实现

ApiSignAuth

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ApiSignAuth {

    /**
     * 是否启用
     *
     * @return
     */
    boolean enable() default true;
}

ApiAuthAspect

@Aspect
@Configuration
@Slf4j
public class ApiAuthAspect {

    @NacosValue("${api.sign.open:true}")
    private boolean isOpen;

    @Pointcut("@annotation(edu.sairobo.web.modules.openapi.annotation.ApiSignAuth)")
    public void apiAuth() {

    }

    @Around("apiAuth()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        if (!isOpen) {
            return pjp.proceed();
        }

        Object proceed;
        MethodSignature signature = (MethodSignature) pjp.getSignature();
        Method method = signature.getMethod();
        ApiSignAuth apiSignAuth = method.getAnnotation(ApiSignAuth.class);

        // 是否验签
        if (apiSignAuth != null && apiSignAuth.enable()) {
            // 执行验签
            OpenApiUtil.executeApiSign(HttpKit.getRequest());
        }
        proceed = pjp.proceed();
        return proceed;
    }
}



上一篇 下一篇

猜你喜欢

热点阅读