|
@@ -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; |
|
|
|
|
|
} |
|
|
|
|
|
} |