feat: 新增CaptchaService实现类
This commit is contained in:
		| @@ -0,0 +1,77 @@ | ||||
| package com.cnbm.admin.service.impl; | ||||
|  | ||||
| import com.cnbm.admin.service.CaptchaService; | ||||
| import com.cnbm.common.redis.RedisKeys; | ||||
| import com.google.common.cache.Cache; | ||||
| import com.google.common.cache.CacheBuilder; | ||||
| import com.wf.captcha.SpecCaptcha; | ||||
| import com.wf.captcha.base.Captcha; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.beans.factory.annotation.Value; | ||||
| import org.springframework.data.redis.core.RedisTemplate; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import javax.servlet.http.HttpServletResponse; | ||||
| import java.io.IOException; | ||||
| import java.util.concurrent.TimeUnit; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/23 12:29 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Service | ||||
| public class CaptchaServiceImpl implements CaptchaService { | ||||
|     @Autowired | ||||
|     private RedisTemplate redisTemplate; | ||||
|  | ||||
|     /** | ||||
|      * Local Cache  5分钟过期 | ||||
|      */ | ||||
|     Cache<String, String> localCache = CacheBuilder.newBuilder().maximumSize(1000).expireAfterAccess(5, TimeUnit.MINUTES).build(); | ||||
|  | ||||
|     @Override | ||||
|     public void create(HttpServletResponse response, String uuid) throws IOException { | ||||
|         response.setContentType("image/gif"); | ||||
|         response.setHeader("Pragma", "No-cache"); | ||||
|         response.setHeader("Cache-Control", "no-cache"); | ||||
|         response.setDateHeader("Expires", 0); | ||||
|  | ||||
|         //生成验证码 | ||||
|         SpecCaptcha captcha = new SpecCaptcha(150, 40); | ||||
|         captcha.setLen(5); | ||||
|         captcha.setCharType(Captcha.TYPE_DEFAULT); | ||||
|         captcha.out(response.getOutputStream()); | ||||
|  | ||||
|         //保存到缓存 | ||||
|         setCache(uuid, captcha.text()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean validate(String uuid, String code) { | ||||
|         //获取验证码 | ||||
|         String captcha = getCache(uuid); | ||||
|  | ||||
|         //效验成功 | ||||
|         if(code.equalsIgnoreCase(captcha)){ | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     private void setCache(String key, String value){ | ||||
|         key = RedisKeys.getCaptchaKey(key); | ||||
|         redisTemplate.opsForValue().set(key, value, 300,TimeUnit.SECONDS); | ||||
|     } | ||||
|  | ||||
|     private String getCache(String key){ | ||||
|         key = RedisKeys.getCaptchaKey(key); | ||||
|         String captcha = (String)redisTemplate.opsForValue().get(key); | ||||
|         //删除验证码 | ||||
|         if(captcha != null){ | ||||
|             redisTemplate.delete(key); | ||||
|         } | ||||
|         return captcha; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user