0
点赞
收藏
分享

微信扫一扫

安全技术--接口幂等性设计

上一篇 <<<安全技术--Https相关知识
下一篇 >>>安全框架--SpringSecurity


幂等:无论请求多少次,数据都不会变,防止重复提交

幂等设计方案

  • 1.MVCC方案(乐观锁方式)
  • 2.悲观锁
  • 3.去重表
  • 4.Token机制

纯手写互联网API接口幂等框架

    1. 接口方式保证幂等性
    1. 表单提交保证幂等性
  • 3.核心代码
// 1.使用AOP环绕通知拦截所有访问(controller)
@Pointcut("execution(public * com.jarye.controller.*.*(..))")
public void rlAop() {}

// 含有ExtApiToken注解的均设置令牌信息
@Before("rlAop()")
public void before(JoinPoint point) {
    MethodSignature signature = (MethodSignature) point.getSignature();
    ExtApiToken extApiToken = signature.getMethod().getDeclaredAnnotation(ExtApiToken.class);
    if (null==extApiToken) {
        return;
    }
    // 可以放入到AOP代码 前置通知
    getRequest().setAttribute("token", redisToken.getToken());
}

// 环绕通知
@Around("rlAop()")
public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
    // 2.判断方法上是否有加ExtApiIdempotent注解
    MethodSignature methodSignature = (MethodSignature) proceedingJoinPoint.getSignature();
    ExtApiIdempotent declaredAnnotation = methodSignature.getMethod().getDeclaredAnnotation(ExtApiIdempotent.class);
    // 3.如何方法上有加上ExtApiIdempotent
    if (declaredAnnotation != null) {
        String type = declaredAnnotation.type();
        // 如何使用Token 解决幂等性
        String token = null;
        HttpServletRequest request = getRequest();
        //接口形式是放在头部,表单形式是放在body中
        if (type.equals(ConstantUtils.EXTAPIHEAD)) {
            token = request.getHeader("token");
        } else {
            token = request.getParameter("token");
        }
        if (StringUtils.isEmpty(token)) {
            return "参数错误";
        }
        // 3.接口获取对应的令牌,如果能够获取该(从redis获取令牌)令牌(将当前令牌删除掉) 就直接执行该访问的业务逻辑
        boolean isToken = redisToken.findToken(token);
        // 4.接口获取对应的令牌,如果获取不到该令牌 直接返回请勿重复提交
        if (!isToken) {
            response("请勿重复提交!");
            // 后面方法不在继续执行
            return null;
        }

    }
    // 放行
    Object proceed = proceedingJoinPoint.proceed();
    return proceed;
    
}

相关文章链接:
<<<Web常用攻击手段-XSS
<<<Web常用攻击手段-SQL注入
<<<Web常用攻击手段-Http请求防盗链
<<<Web常用攻击手段-CSRF攻击
<<<Web常用攻击手段-上传文件漏洞
<<<Web常用攻击手段-忘记密码
<<<Web常用攻击手段-其他漏洞
<<<安全技术--数据加密/认证技术
<<<安全技术--Https相关知识
<<<安全框架--SpringSecurity
<<<安全框架--JWT
<<<安全框架--OAuth2
<<<安全架构整体设计方案

举报

相关推荐

0 条评论