New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

io.github.yufeixuan:easy-captcha

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

io.github.yufeixuan:easy-captcha

Java图形验证码,支持gif验证码、中文验证码,适用于Java Web、JavaSE项目,支持jdk11。

  • 1.5.4
  • Source
  • Maven
  • Socket score

Version published
Maintainers
1
Source

EasyCaptcha

1.简介

  Java图形验证码,支持png透明验证码,支持gif验证码,支持base64验证码,中文验证码,可用于Java Web、JavaSE项目, 1.5.4版本支持jdk11

2.效果展示

2.1.jpg验证码

png png png png

2.2.base64验证码

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAY

2.3.中文验证码

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>
        <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);
        
        // 验证码存入session
        request.getSession().setAttribute("captcha", gifCaptcha.text().toLowerCase());
        
        // 输出图片流
        gifCaptcha.out(response.getOutputStream());
    }
    
    @PostMapping("/login")
    public JsonResult login(String username,String password,String code){
        // 获取session中的验证码
        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 {

  // 设置请求头为输出图片类型png
  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中。

FAQs

Package last updated on 15 Mar 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc