java数据进行验证,防重复提交

1.在进入页面的时候提交修改时间,然后进行提交的时候,将修改时间带入到后台,然后查询数据库,当两个时间相同的时候,进行操作,否则就提示已操作.
2.看到一种更广泛的方式,就是在进入页面的时候生成一个token,然后赋值到session中,同时带入到页面中,然后提交过程中,将页面带入的token与session中的token比较,相同则通过校验并删除session。
3、使用redis分布式锁,这边写了一个通用方法,只需要标注下CustomerLock就可以了

	@RequestMapping("test")
    @CustomerLock(key="#id",lockTimeOut = 3000)
    public void test(@Param("id") @RequiredParam Long id) {
   
       
    }
    @RequestMapping("test")
    @CustomerLock(key="#testVo.id",lockTimeOut = 3000)
    public void test(TestVo testVo) {
   

    }

首先定义一个CustomerLock注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomerLock {
   
 
    String key() ;
    long lockTimeOut() default 9000 ;
    String errorMessage() default "请勿重复提交";
}

然后定义一个RedisLock

@Component
@Slf4j
public class RedisLock {
   
 
    @Autowired
    private RedisTemplate<String, String> redisTemplate;
 
    /**
     * 加锁
     * @param key
     * @param value 当前时间+超时时间
     * @return
     */
    public boolean lock(String key, String value) {
   
        if(redisTemplate.opsForValue().setIfAbsent(key, value)) {
   
            return true;
        }
        //currentValue=A   这两个线程的value都是B  其中一个线程拿到锁
        String currentValue = redisTemplate.opsForValue().get(key);
        //如果锁过期
        if (!StringUtils.isEmpty(currentValue)
                && Long.parseLong
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值