码迷,mamicode.com
首页 > 编程语言 > 详细

Spring中整合Cage,实现验证码功能

时间:2018-03-19 14:19:04      阅读:358      评论:0      收藏:0      [点我收藏+]

标签:end   valueof   group   puts   blog   als   总结   equal   pid   

1.pom.xml中添加Cage依赖。

    <dependency>
            <groupId>com.github.cage</groupId>
            <artifactId>cage</artifactId>
            <version>1.0</version>
        </dependency>    

项目相关资料:https://akiraly.github.io/cage/quickstart.html 。

2.Controller:@RestController


@RestController
@RequestMapping("captcha")
public class CaptchaController {

@Autowired
private CaptchaService captchaService;

@RequestMapping("get")
public void get(HttpServletResponse response,String key) throws IOException {
response.setContentType("image/jpeg");//设置响应的媒体类型,这样浏览器会识别出响应的是图片
response.getOutputStream().write(captchaService.getCaptcha(key));
response.flushBuffer();
}
}

3.Service:

@Service("captchaService")
public class CaptchaService {

    private static final Logger log = LoggerFactory.getLogger(CaptchaService.class);

    @Autowired
    RedisDao redisDao;
    Cage cage = new GCage();

    public byte[] getCaptcha(String id) {
        if (StringUtils.isBlank(id)) {
            return null;
        }
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        String token = cage.getTokenGenerator().next().substring(0, 4);
        try {
            cage.draw(token, os);
            os.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        String key = "captcha-" + id;
        redisDao.getJredis().opsForValue().set(key, token);
        redisDao.getJredis().expire(key, 1, TimeUnit.HOURS);
        return os.toByteArray();
    }

    public boolean matchCaptcha(String id, String captcha) {
        if (StringUtils.isBlank(id) || StringUtils.isBlank(captcha)) {
            return false;
        }
        String key = "captcha-" + id;
        String redisCaptcha = String.valueOf(redisDao.getJredis().opsForValue().get(key));
        if (StringUtils.isBlank(redisCaptcha)) {
            return false;
        }
        log.info(id + ", " + captcha + ", " + redisCaptcha);
        return StringUtils.equalsIgnoreCase(captcha, redisCaptcha);
    }
}

4.前端页面:

$(‘#yzmimg‘).attr(‘src‘,‘https://localhost:8082/captcha/get?key‘+timestamp);

总结:设置

response.setContentType("image/jpeg"),这样返回时将会以图片形式,此处为坑。

Spring中整合Cage,实现验证码功能

标签:end   valueof   group   puts   blog   als   总结   equal   pid   

原文地址:https://www.cnblogs.com/zacky31/p/8601633.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!