EasyCaptcha
1.简介
Java图形验证码,支持png透明验证码,支持gif验证码,支持base64验证码,中文验证码,可用于Java Web、JavaSE项目,
1.5.4版本支持jdk11
2.效果展示
2.1.jpg验证码
![png](https://raw.githubusercontent.com/yufeixuan/easycaptcha/master/images/gif/aa3.gif)
2.2.base64验证码
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAY
2.3.中文验证码
![png](https://raw.githubusercontent.com/yufeixuan/easycaptcha/master/images/zh/cc.png)
3.导入项目
3.1.maven方式引入
在你的pom.xml中添加如下代码:
<dependency>
<groupId>io.github.yufeixuan</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.5.4</version>
</dependency>
4.使用方法
4.1.快速使用
1.在web.xml里面加入如下配置:
<web-app>
<servlet>
<servlet-name>CaptchaServlet</servlet-name>
<servlet-class>CaptchaServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CaptchaServlet</servlet-name>
<url-pattern>/images/captcha</url-pattern>
</servlet-mapping>
</web-app>
2.前端代码
<img src="/images/captcha" />
4.2.在SpringMVC中使用
也可以使用controller的形式输出验证码,方法如下:
@Controller
public class MainController {
@RequestMapping("/images/captcha")
public void captcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
CaptchaUtil.out(request, response);
}
}
前端代码:
<img src="/images/captcha" />
4.3.判断验证码是否正确
@Controller
public class LoginController {
@PostMapping("/login")
public JsonResult login(String username,String password,String code){
if (!CaptchaUtil.ver(code, request)) {
CaptchaUtil.clear(request);
return JsonResult.error("验证码不正确");
}
}
}
4.4.设置宽高和位数
@Controller
public class MainController {
@RequestMapping("/images/captcha")
public void captcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
CaptchaUtil.out(5, request, response);
CaptchaUtil.out(130, 48, 5, request, response);
}
}
4.5.不使用工具类
CaptchaUtil是为了简化操作,封装了生成验证码、存session、判断验证码等功能。CaptchaUtil使用的GifCaptcha
生成的字母数字混合的gif验证码,如果需要设置更多的参数,请参照如下操作使用:
@Controller
public class MainController {
@RequestMapping("/images/captcha")
public void captcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
CaptchaUtil.setHeader(response, 0);
GifCaptcha gifCaptcha = new GifCaptcha(130, 48, 5);
gifCaptcha.setFont(new Font("Verdana", Font.PLAIN, 32));
gifCaptcha.setCharType(Captcha.TYPE_ONLY_NUMBER);
request.getSession().setAttribute("captcha", gifCaptcha.text().toLowerCase());
gifCaptcha.out(response.getOutputStream());
}
@PostMapping("/login")
public JsonResult login(String username,String password,String code){
String sessionCode = request.getSession().getAttribute("captcha");
if (code==null || !sessionCode.equals(code.trim().toLowerCase())) {
return JsonResult.error("验证码不正确");
}
}
}
5.更多设置
5.1.使用Gif验证码
public class Test {
public static void main(String[] args) {
OutputStream outputStream = new FileOutputStream(new File("D:/a/aa.gif"));
GifCaptcha gifCaptcha = new GifCaptcha(130, 48, 5);
gifCaptcha.setFont(new Font("Verdana", Font.PLAIN, 32));
gifCaptcha.setCharType(Captcha.TYPE_ONLY_NUMBER);
String code = gifCaptcha.text();
gifCaptcha.out(outputStream);
}
}
5.2.使用png验证码
public class Test {
public static void main(String[] args) {
OutputStream outputStream = new FileOutputStream(new File("D:/a/aa.png"));
SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5);
specCaptcha.setFont(new Font("Verdana", Font.PLAIN, 32));
specCaptcha.setCharType(Captcha.TYPE_ONLY_NUMBER);
String code = specCaptcha.text();
specCaptcha.out(outputStream);
}
}
@RequestMapping("/getcode")
public void captcha(HttpServletRequest request, HttpServletResponse response) throws IOException {
CaptchaUtil.setHeader(response, 0);
SpecCaptcha specCaptcha = new SpecCaptcha(85, 45, 4);
specCaptcha.setCharType(Captcha.TYPE_DEFAULT);
request.getSession().setAttribute("captcha", specCaptcha.text().toLowerCase());
specCaptcha.out(response.getOutputStream());
}
5.3.验证码类型
类型 | 描述 |
---|
TYPE_DEFAULT | 数字和字母混合 |
TYPE_ONLY_NUMBER | 纯数字 |
TYPE_ONLY_CHAR | 纯字母 |
TYPE_ONLY_UPPER | 纯大写字母 |
TYPE_ONLY_LOWER | 纯小写字母 |
TYPE_NUM_AND_UPPER | 数字和大写字母 |
5.4.中文验证码
中文png验证码:
public class Test {
public static void main(String[] args) {
OutputStream outputStream = new FileOutputStream(new File("D:/a/aa.png"));
ChineseCaptcha chineseCaptcha = new ChineseCaptcha(130, 48, 4);
chineseCaptcha.setFont(new Font("楷体", Font.PLAIN, 28));
String code = chineseCaptcha.text();
chineseCaptcha.out(outputStream);
}
}
中文gif验证码:
public class Test {
public static void main(String[] args) {
OutputStream outputStream = new FileOutputStream(new File("D:/a/aa.png"));
ChineseGifCaptcha chineseGifCaptcha = new ChineseGifCaptcha(130, 48, 4);
chineseGifCaptcha.setFont(new Font("楷体", Font.PLAIN, 28));
String code = chineseGifCaptcha.text();
chineseGifCaptcha.out(outputStream);
}
}
5.5.base64验证码
public class Test {
public static void main(String[] args) {
String base64;
ByteArrayOutputStream stream = new ByteArrayOutputStream();
SpecCaptcha specCaptcha = new SpecCaptcha();
base64 = specCaptcha.base64(stream);
System.out.println(base64);
}
}
5.6.前后端分离项目的使用
分离项目建议不要存储在session中,存储在redis中。