SpringBoot结合Redis实现幂等

SpringBoot结合Redis实现幂等

1、相关概念和思路

  • 幂等:就是说客户端不管访问多少次,服务器端处理或者返回的结果都是一样
  • 思路:我们首先让客户端访问一个获取token的接口,然后让客户端携带token来访问具有幂等(@Idempotent)注解的接口,从而消费掉这个token,这样就可以避免用户重复访问一个接口了,我们把token存在redis中并且设置好过期时间。

2、项目依赖和配置

这里没有用到数据库,只是使用spring-web和redis两个依赖,配置也就是配置redis相关

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring.redis.host=localhost
spring.redis.port=6379

3、幂等注解(@Idempotent)

注解起一个标识的作用,我们还需要使用拦截器用来拦截方法,然后通过方法对象获取到方法上面的注解,

我们判断这个注解是否是我们需要的,如果是,则执行相关操作就可以了,不是,直接放行。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Idempotent {
   
}

4、拦截器

  • 实现HandlerInterceptor接口,加上注解@Component交给spring管理
@Component
public class IdempotentInterceptor implements HandlerInterceptor {
   

    // 注解的作用就是起一个标识的作用,使用拦截器可以拦截方法,然后方法可以获取到注解,判断注解上的方法是否是我们想要的注解,
    // 是:执行我们需要的逻辑;不是:注解放行或者拦截

    @Autowired
    private TokenService tokenService;

  	  //预处理回调方法,实现处理器的预处理(如检查登陆),第三个参数为响应的处理器,自定义Controller的方法对象
    //返回值:true表示继续流程(如调用下一个拦截器或处理器);false表示流程中断(如登录检查失败),
    // 不会继续调用其他的拦截器或处理器,此时我们需要通过response来产生响应;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值