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

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"),这样返回时将会以图片形式,此处为坑。

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

时间: 2024-10-08 05:07:16

Spring中整合Cage,实现验证码功能的相关文章

Spring中整合Titles

在<Spriing实战(第三版)>这本书中,有一个使用titles的例子,但是这是一个不完整的例子.那么要参照起来就比较难了,于是找到了下面这篇博客. 在Spring中使用tiles2 (因为是英文的,同时又是比较简单的英文,那么就翻译一下,当作学习) 在这个例子中,你将学会怎样整合Spring和Tiles2.这个例子的目录结构如下: 添加下面的库文件到库目录,(当然如果是在Eclipse中就是对应的lib文件夹了). 01.antlr-runtime-3.0 02.commons-loggi

spring中整合memcached,以及创建memcache的put和get方法

spring中整合memcached,以及创建memcache的put和get方法: 1:在项目中导入memcache相关的jar包 2:memcache在spring.xml的配置: 代码: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="

在Spring中整合JUnit单元测试

一 简介 在Java Web开发中,通常我们会开发很多的功能代码.在代码正式使用之前,为了确保代码能够正确实现我们预期的功能,最好是添加一些简单代码对代码逻辑进行测试.很显然,JUnit就是一个不错的单元测试工具,同时在Spring中我们也可以很方便地引入JUnit进行测试 二 代码实例 (1)引入必需的jar包: 这里除了Spring以及其他模块所需要的jar包之外,还需要引入: spring-test-4.2.3.RELEASE.jar junit-4.10.jar 注:jar包版本使用最新

玩转Spring MVC(五)----在spring中整合log4j

在前边的基础上,本文主要总结一下如何在spring 中配置log4j,在本文末尾会给出完整项目的链接. 首先是web.xml中要新添加的代码: <!-- 6. 配置log4j --> <!--6.1 配置加载log4j.xml文件路径 --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/classes/spring

maven项目,在spring中整合mybatis

一.pom.xml配置,导入所需jar包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quo

Spring中AOP的实现

Spring中整合了AOP的功能,虽然有不足,没有专门做AOP框架的那么完美,但是用一用感觉还是不错的 一些概念: AOP 面向切面编程 aspect 切面/切面类(我个人认为一个真正被解耦的程序,切面类中的功能可以切入到 任何一个目标类中 无所谓是service层或者说是dao层中的类) joinPoint 连接点 在spring的aop中只有 类中的方法 可以做连接点,每一个方法都可以是一个连接点. pointCut 切入点 一组连接点的集合 advice 通知/拦截器 用来控制切面类将来到

企业分布式微服务云SpringCloud SpringBoot mybatis (十三)Spring Boot整合MyBatis

Spring中整合MyBatis就不多说了,最近大量使用Spring Boot,因此整理一下Spring Boot中整合MyBatis的步骤.搜了一下Spring Boot整合MyBatis的文章,方法都比较老,比较繁琐.查了一下文档,实际已经支持较为简单的整合与使用.下面就来详细介绍如何在Spring Boot中整合MyBatis,并通过注解方式实现映射. 整合MyBatis 新建Spring Boot项目,或以Chapter1为基础来操作 pom.xml中引入依赖 这里用到spring-bo

让Mongo在Spring中跑起来

本文标题为<让Mongo在Spring中跑起来>,旨在Spring中如何成功连接MongoDB并对其进行增删改查等操作,由于笔者也是刚接触,对其中的一些原由也不甚了解,若有错误之处,敬请指正. 习惯了MySQL在Spring中整合时填写各种各样的连接参数,本来只想做一件简单的数据库插入查询而已,翻遍整个互联网通篇都是复制粘贴抄袭的配置,连接数的多少,超时时间的多少等等. SprintBoot的出现,秉持**约定大于配置**的目标,可以使你免去许多配置的烦脑,“约定”即是大多数人都这么做,你这么

Cage与Spring的整合

package com.lavasoft.ntv.web.common; import com.github.cage.Cage; import com.github.cage.IGenerator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframew