• 【Redis__验证】手机验证和限制登录功能


    redisweb.rar

    TestController

    package k.controller;
    
    import k.utils.AjaxResult;
    import k.utils.RedisService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import javax.servlet.http.HttpServletRequest;
    import java.util.concurrent.TimeUnit;
    
    @Controller
    @RequestMapping("/test")
    public class TestController {
    
        @Autowired
        private RedisService redisService;
    
        @RequestMapping("/verify")
        public String verifyMobile() {
            return "test/verify";
        }
    
        @RequestMapping("/doVerify")
        @ResponseBody
        public AjaxResult doVerify(HttpServletRequest request) {
            AjaxResult ajaxResult = AjaxResult.success();
            String mobile = request.getParameter("mobile");
            String yzm = request.getParameter("yzm");
    
            String gqKey = mobile;
            if (redisService.existsKey(gqKey)) {
                String keyVal = redisService.getKeyVal(gqKey);
                Integer old = Integer.parseInt(keyVal);
                if (old >= 3) {
                    ajaxResult.setCode(0);
                    ajaxResult.setMsg("20s验证3次");
                    return ajaxResult;
                }
                redisService.setKeyVal(gqKey, (++old).toString());
            } else {
                redisService.setKeyVal(gqKey, "1");
                redisService.expireKey(gqKey, 20, TimeUnit.SECONDS);
            }
    
            String yzm_key = "yzm" + mobile;
            if (redisService.existsKey(yzm_key)) {
                String keyVal = redisService.getKeyVal(yzm_key);
                System.out.println("keyVal==" + keyVal + " yzm==" + yzm);
                if (keyVal.equals(yzm)) {
                    ajaxResult.setMsg("验证成功");
                } else {
                    ajaxResult.setMsg("验证失败");
                }
            } else {
                redisService.setKeyVal(yzm_key, "1234");
                redisService.expireKey(yzm_key, 20, TimeUnit.SECONDS);
            }
    
            return ajaxResult;
        }
    
        @RequestMapping("/doLogin")
        @ResponseBody
        public AjaxResult doLogin(HttpServletRequest request) {
            AjaxResult ajaxResult = AjaxResult.success();
            String mobile = request.getParameter("mobile");
            String pwd = request.getParameter("pwd");
    
            String xianzhiKey = "xz" + mobile;
            if (redisService.existsKey(xianzhiKey)) {
                ajaxResult.setCode(0);
                ajaxResult.setMsg("登录错误次数太多,请稍后尝试");
                return ajaxResult;
            }
    
            String timeKey = "time" + mobile;
            if ("123456".equals(pwd)) {
                ajaxResult.setCode(1);
                ajaxResult.setMsg("登录成功");
                redisService.setKeyVal(timeKey, "0");
                redisService.expireKey(timeKey, 10, TimeUnit.SECONDS);
                return ajaxResult;
            } else {
                ajaxResult.setCode(0);
                ajaxResult.setMsg("登录失败");
                if (redisService.existsKey(timeKey)) {
                    String keyVal = redisService.getKeyVal(timeKey);
                    Integer old = Integer.parseInt(keyVal);
                    if (old >= 5) {
                        ajaxResult.setMsg("登录错误5次");
                        redisService.setKeyVal(xianzhiKey, "1");
                        redisService.expireKey(xianzhiKey, 20, TimeUnit.SECONDS);
                        return ajaxResult;
                    }
                    redisService.setKeyVal(timeKey, (++old).toString());
                } else {
                    redisService.setKeyVal(timeKey, "1");
                    redisService.expireKey(timeKey, 10, TimeUnit.SECONDS);
                }
                return ajaxResult;
            }
        }
    }
    
    

    RedisService

    package k.utils;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.stereotype.Component;
    
    import java.util.Collection;
    import java.util.Date;
    import java.util.Set;
    import java.util.concurrent.TimeUnit;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    @Component
    public class RedisService {
        @Autowired
        private RedisTemplate<String, String> redisTemplate;
    
        /**
         * 默认过期时长,单位:秒
         */
        public static final long DEFAULT_EXPIRE = 60 * 60 * 24;
    
        /**
         * 不设置过期时长
         */
        public static final long NOT_EXPIRE = -1;
    
    
        public boolean existsKey(String key) {
            return redisTemplate.hasKey(key);
        }
    
        /**
         * 重名名key,如果newKey已经存在,则newKey的原值被覆盖
         *
         * @param oldKey
         * @param newKey
         */
        public void renameKey(String oldKey, String newKey) {
            redisTemplate.rename(oldKey, newKey);
        }
    
        /**
         * newKey不存在时才重命名
         *
         * @param oldKey
         * @param newKey
         * @return 修改成功返回true
         */
        public boolean renameKeyNotExist(String oldKey, String newKey) {
            return redisTemplate.renameIfAbsent(oldKey, newKey);
        }
    
        /**
         * 删除key
         *
         * @param key
         */
        public void deleteKey(String key) {
            redisTemplate.delete(key);
        }
    
        /**
         * 删除多个key
         *
         * @param keys
         */
        public void deleteKey(String... keys) {
            Set<String> kSet = Stream.of(keys).map(k -> k).collect(Collectors.toSet());
            redisTemplate.delete(kSet);
        }
    
        /**
         * 删除Key的集合
         *
         * @param keys
         */
        public void deleteKey(Collection<String> keys) {
            Set<String> kSet = keys.stream().map(k -> k).collect(Collectors.toSet());
            redisTemplate.delete(kSet);
        }
    
        /**
         * 设置key的生命周期
         *
         * @param key
         * @param time
         * @param timeUnit
         */
        public void expireKey(String key, long time, TimeUnit timeUnit) {
            redisTemplate.expire(key, time, timeUnit);
        }
    
        /**
         * 指定key在指定的日期过期
         *
         * @param key
         * @param date
         */
        public void expireKeyAt(String key, Date date) {
            redisTemplate.expireAt(key, date);
        }
    
        /**
         * 查询key的生命周期
         *
         * @param key
         * @param timeUnit
         * @return
         */
        public long getKeyExpire(String key, TimeUnit timeUnit) {
            return redisTemplate.getExpire(key, timeUnit);
        }
    
        /**
         * 将key设置为永久有效
         *
         * @param key
         */
        public void persistKey(String key) {
            redisTemplate.persist(key);
        }
    
        public String getKeyVal(String key) {
            return redisTemplate.opsForValue().get(key);
        }
    
        public void setKeyVal(String key, String val) {
            redisTemplate.opsForValue().set(key, val);
        }
    }
    
  • 相关阅读:
    js获取html参数。
    jquery判断单选按钮是否选中
    js滑动触屏事件监听
    单例模式之Java
    Android开发把项目打包成apk
    jdom解析XML 中文
    PhoneGap Connection
    java 文件操作
    html参数编码
    JS 判断字符串包含
  • 原文地址:https://www.cnblogs.com/kikyoqiang/p/13160002.html
Copyright © 2020-2023  润新知