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"),这样返回时将会以图片形式,此处为坑。
Spring中整合Cage,实现验证码功能的更多相关文章
- spring中整合memcached,以及创建memcache的put和get方法
spring中整合memcached,以及创建memcache的put和get方法: 1:在项目中导入memcache相关的jar包 2:memcache在spring.xml的配置: 代码: < ...
- Spring中整合Titles
在<Spriing实战(第三版)>这本书中,有一个使用titles的例子,但是这是一个不完整的例子.那么要参照起来就比较难了,于是找到了下面这篇博客. 在Spring中使用tiles2 ( ...
- 利用cglib包实现Spring中aop的<aop:advisor>功能
一:前言 还有<aop:before>/<aop:after>/<aop:around>的没有实现,不过根<aop:advisor>是差不多的,就是要额 ...
- S2SH框架中的无刷新验证码功能实现
暑假期间在实验室做使用S2SH框架的项目,其中登录和注册需要验证码,实现了一个没有实现刷新验证码功能的简单版本,代码如下: 1 package com.sem.action; 2 3 import j ...
- 玩转Spring MVC(五)----在spring中整合log4j
在前边的基础上,本文主要总结一下如何在spring 中配置log4j,在本文末尾会给出完整项目的链接. 首先是web.xml中要新添加的代码: <!-- 6. 配置log4j --> &l ...
- SpringBoot学习:整合shiro(验证码功能和登录次数限制功能)
项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 (一)验证码 首先login.jsp里增加了获取验证码图片的标签: <body s ...
- spring中整合ssm框架注解版
和xml版差不多,只不过创建对象的方式是由spring自动扫描包名,然后命名空间多一行context代码在application.xml中,然后将每个对象通过注解创建和注入: 直接上代码: 1.use ...
- SpringMVC整合kaptcha(验证码功能)
一.依赖 <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha& ...
- SpringMVC 整合 kaptcha(验证码功能)
一.添加依赖 <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptch ...
随机推荐
- python-装饰器简述
装饰器是什么 用来修饰别的函数的函数就可以称之为装饰器 这种函数的参数一般就是另外一个函数 也就是说,调用这种函数,需要给这种函数传参,且参数是函数 @语法糖 @语法糖一般用来表示装饰器函数 不用@也 ...
- 在bootstrap中让竖向排列的输入框水平排列
在bootstrap中可以使用自带的样式标记来控制样式,但是同时可以利用最原始的css样式来解决达到需求 如下所示可以看出来两个inline-block就可以使得两个水平排列 block和inline ...
- Linux知识积累(1)awk的使用方法
参见:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 简介 awk是一个强大的文本分析工具,相对于grep的查找,se ...
- LXC学习实践(1)LXC的概念和用途
1.LXC是什么? LXC是Linux containers的简称,是一种基于容器的操作系统层级的虚拟化技术,Sourceforge上有LXC这个开源项目. 2.LXC能做什么? LXC和Linux内 ...
- SpringCloud的Archaius - 动态管理属性配置
参考链接:http://www.th7.cn/Program/java/201608/919853.shtml 一.Archaius是什么? Archaius用于动态管理属性配置文件. 参考自Gett ...
- 关于阿里巴巴iconfont的使用方法
iconfont网址:http://www.iconfont.cn/ 说起iconfont,做前端开发的应该知道它的好处,图标库之丰富,只有你想不到的,没有你找不到的,而且轻量高清.用户在iconfo ...
- python 异常 反射
异常 反射 一.异常处理: AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常:基本上是无法打开文件 ImportError ...
- Python/模块与包之模块
Python/模块与包之模块 1.什么是模块? 模块就是py文件 2.为什么要用模块? 如果在解释器上进行编码,把解释器关闭之前写的文件就不存在了,如果使用模块的话就能永久保存在磁盘中. 3.如何使用 ...
- __new__方法首先调用并返回一个实例化对象
>>> class CapStr(str): def __new__(cls,string): string = string.upper() return str.__new__( ...
- 0417 jsBom操作+Dom再次整理
BOM 1.Windows对象 window.open("打开的地址","打开的位置")window.opener:打开此页面的上一个页面对象window.cl ...