1、maven依赖:
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.2</version>
</dependency>
2、具体代码:
@GetMapping("/getImage")
public void getImage(HttpServletResponse response){
try {
ServletOutputStream out = response.getOutputStream();
response.setContentType("image/png");
// 宽,高,长度
SpecCaptcha specCaptcha = new SpecCaptcha(125, 45, 4);
// 设置字体大小
specCaptcha.setFont(Captcha.FONT_2);
// 数字显示
specCaptcha.setCharType(Captcha.TYPE_ONLY_NUMBER);
String code = specCaptcha.text().toLowerCase();
// 将value放入redis
redisTemplate.opsForValue().set(LoginKey +code,code,60, TimeUnit.SECONDS);
specCaptcha.out(out);
} catch (Exception e) {
System.out.println("验证码异常错误"+e.getMessage());
}
}
3、前端代码:
<form action="${pageContext.request.contextPath}/shiro/login" method="post">
用户名:<input type="text" name="username" > <br/>
密码 : <input type="text" name="password"> <br>
验证码 : <input type="text" name="code"><img src="${pageContext.request.contextPath}/shiro/getImage" alt=""> <br>
<input type="submit" value="登录">
</form>
4、验证码放入redis缓存
redis配置:(redis操作放入步骤二)
@Component
public class RedisConfig {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// key序列化
redisTemplate.setKeySerializer(new StringRedisSerializer());
// value序列化
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
}