一段生成验证码图片的程序

RandomImage:一个能够获取随机图片的Api,使用SpringBoot构建 随机图像Api Random-Image-Api一个能够获取随机图片的Api,基于Spring Boot构建 可读取本地图片列表的地址,并提供随机访问服务,可配置域名白名单访问 项目说明 程序启动的时候会自动加载项目路径/list文件夹下的所有列表文件; 图片列表文件: 提供访问路径为文件名的随机图片服务 文件命名格式xxx.txt必须为.txt结尾,每行一个图片url 域名白名单列表文件: 会开启域名白名单访问,只允许列表中的域名进行接口调用 命名只能为domains.txt ,每行一个域名,支持通用域名例如输入test.com ,可以允许所有test.com结尾的域名访问 若域名列表文件不存在或文件为空,则关闭域名白名单服务,任何域名都可以进行调用。 更改列表文件后,刷新图片缓存即可生效。 编译运行 # 拉取项目 git clone https://github.com/noisky 立即下载
package test;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.OutputStream;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ImageGenerator extends HttpServlet {
  
/**
   * 
   
*/

  
private static final long serialVersionUID = -3938318741402322164L;

  
private static Color getRandColor(int fc, int bc) {
    Random random 
= new Random();
    
if (fc > 255)
      fc 
= 255;
    
if (bc > 255)
      bc 
= 255;
    
int r = fc + random.nextInt(bc - fc);
    
int g = fc + random.nextInt(bc - fc);
    
int b = fc + random.nextInt(bc - fc);
    
return new Color(r, g, b);
  }


  
private static String charsLong = "23456789abcdefghjklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";

  
private static String charsShort = "0123456789";

  
private static String chars = charsLong;

  @Override
  
public void doGet(HttpServletRequest request, HttpServletResponse response) {
    
try {
      
int charsLength = chars.length();

      response.setHeader(
"Pragma", "No-cache");
      response.setHeader(
"Cache-Control", "no-cache");
      response.setDateHeader(
"Expires", 0);

      
int width = 70, height = 20;
      BufferedImage image 
= new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

      Graphics g 
= image.getGraphics();

      Random random 
= new Random();

      g.setColor(getRandColor(
200, 250));
      g.fillRect(
0, 0, width, height);

      g.setFont(
new Font("Times New Roman", Font.ITALIC, height));

      g.setColor(getRandColor(
160, 200));
      
for (int i = 0; i < 35; i++) {
        
int x = random.nextInt(width);
        
int y = random.nextInt(height);
        
int xl = random.nextInt(12);
        
int yl = random.nextInt(12);
        g.drawLine(x, y, x 
+ xl, y + yl);
      }


      StringBuilder sRand 
= new StringBuilder();
      String[] fontNames 
= { "Times New Roman", "Arial", "Book antiqua", "" };

      
for (int i = 0; i < 4; i++) {
        g.setFont(
new Font(fontNames[random.nextInt(3)], Font.ITALIC, height));
        
char rand = chars.charAt(random.nextInt(charsLength));
        sRand.append(rand);

        g.setColor(
new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
        g.drawString(String.valueOf(rand), 
16 * i + random.nextInt(6) + 3, height - random.nextInt(4));
      }


      g.setColor(getRandColor(
160, 200));
      
for (int i = 0; i < 30; i++) {
        
int x = random.nextInt(width);
        
int y = random.nextInt(height);
        
int xl = random.nextInt(width);
        
int yl = random.nextInt(width);
        g.drawLine(x, y, x 
+ xl, y + yl);
      }


      request.getSession().setAttribute(
"Login_Image_Code", sRand.toString());

      g.dispose();

      
try {
        Thread.sleep(
100);
      }
 catch (Exception ex) {
      }

      OutputStream os 
= response.getOutputStream();
      ImageIO.write(image, 
"JPEG", os);
      os.flush();
      os.close();
    }
 catch (Exception ex) {

    }

  }

}

 

修改 web.xml

 

<servlet> 
        <servlet-name>imageGenerator</servlet-name> 
        <servlet-class>test.ImageGenerator</servlet-class> 
    </servlet> 
    <servlet-mapping> 
        <servlet-name>imageGenerator</servlet-name> 
        <url-pattern>/image.jsp</url-pattern> 
    </servlet-mapping>
飞塔防火墙CVE-2022-40684漏洞复现:手把手教你搭建靶场环境(附调试技巧) 本文详细指导如何搭建Fortinet飞塔防火墙CVE-2022-40684认证绕过漏洞的靶场环境,涵盖虚拟机部署、网络配置、调试模式开启及漏洞原理分析。通过手把手教程,读者可掌握漏洞复现与深度调试技巧,深入理解该认证绕过漏洞的利用与防御。 阅读详情

相关推荐

SqlSugar避坑指南:C#操作MySQL时你可能会忽略的5个细节

本文分享了使用C#和SqlSugar框架操作MySQL数据库时的实战避坑指南。针对连接配置、实体映射、查询性能、事务处理等关键环节,深入剖析了5个容易被忽略但至关重要的细节,帮助开发者提升项目稳定性和执行效率,避免常见陷阱。

delta的博客 276

.NET使用一般处理程序生成验证码!

此文转载自牛腩老师的博客:http://blog.niunan.net/show.php?id=159 HTML的代码:  源代码复制(IE有效)打印关于     Document   : ASP.NET用一般处理程序生成验证码       Created on : 2008-10-13 17:04       Author     : 牛腩   -->

我翱翔的天空 1663

量子城域网建设设备系列(三):网络管理系统(NMS)

本文对量子网络中的网络管理系统进行了初步的介绍。

量子领域相关话题 2012

用Python写一个自动生成简单验证码图片的程序

框架:PIL,Django 效果: 源码: from PIL import Image, ImageDraw, ImageFont # 引入绘图模块 import random # 引入随机函数模块 from django.http import HttpResponse # 引入HttpResponse模块,返回响应 from io import BytesIO # 在内存中创建 ...

BerenCamlost的博客 4238

解码运动想象:BCI Competition IV 2a数据集实战指南

本文提供了BCI Competition IV 2a数据集的实战指南,详细解析了该经典运动想象脑电数据集的结构、文件格式与实验范式。通过MNE-Python等工具,逐步演示了从原始信号读取、预处理(通道选择、滤波、分段)到特征提取(CSP、频带功率)和模型训练(LDA、SVM)的完整流程,并强调了受试者独立评估的重要性,为BCI研究者提供了可复现的入门与进阶路径。

weixin_29304985的博客 362

Ansys Fluent DPM模型实战:旋风分离器颗粒轨迹仿真全流程解析(附案例文件)

本文详细解析了使用Ansys Fluent中的离散相模型进行旋风分离器颗粒轨迹仿真的全流程。从几何简化、网格策略到物理模型界定,重点阐述了DPM模型的关键设置步骤,包括单向耦合假设、颗粒注入与受力配置,并提供了结果分析与优化方法,帮助工程师精准模拟气固分离过程,提升设计效率。

sunny的博客 702

我的图片验证码

控制器部分: /// &lt;summary&gt;/// 验证码/// &lt;/summary&gt;/// &lt;returns&gt;&lt;/returns&gt;public ActionResult CheckCode(){    //首先实例化验证码的类    ValidateCode validateCode = new ValidateCode();    //生成验证码指定...

weixin_33725272的博客 167

分享一下如何使用labelimg制作自己的YOLO数据集

首先准备一下自己的下准备一个空文件夹用于保存标签文件,如下图所示。

skywalkerxhx的博客 831

JSP生成验证码源程序

 java.awt.image.*,java.util.*,javax.imageio.*" %> // 在内存中创建图象 int width=60, height=20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图形上下文 Graphics g = i

cool_rain_man的专栏 532

OP-TEE虚拟化支持详解

OP-TEE虚拟化支持解析 OP-TEE提供实验性虚拟化方案,支持多虚拟机共享安全执行环境。核心特性包括: 配置选项:CFG_VIRTUALIZATION启用虚拟化,CFG_VIRT_GUEST_COUNT限制虚拟机数量并分配均等内存资源; Hypervisor协作:需实现虚拟机生命周期通知、SMC参数转换、内存固定等关键协议; 当前限制:仅支持Armv8架构,硬件资源共享有限,采用静态内存配额机制; 架构实现:通过MMU分区切换和扩展内存分配器实现多租户隔离,Nexus核心层管理虚拟机上下文。该方案适用于

Linux内核架构师 109

DMC-E 系列总线控制卡----雷赛板卡介绍(十七)

低的速度平稳地接近目标位置,降低运动部件对接触点的冲击。设置插补目标位置,插补方向,以确定插补动作。圆形区域限位,即运动仅在用户设定的圆形范围内进行,超出这个范围,运动会依据设定。首先,用户需要绑定两个轴进而确定该功能所处的坐标系。仅支持平面圆形限位,不支持空间圆形限位。径,可以确定该区域在坐标系中的位置。)运动开始前,用户应当将旋转轴调整到与插补曲线的起点位置相切的角度;可以配合椭圆插补或圆弧插补运动,实现跟随轴的旋转运动角度与曲线当前。外,其它运动形式若开始运动时在限位区域外,则禁止运动;

A_nanda的博客 651

JSP图片验证码

import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"%> Random random = new Random(); if (fc > 255) fc = 255; if (bc > 255) bc = 255; int r = fc + random.nextInt(bc - fc); int g =

fei5656的博客 299

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

使用jsp生成彩色汉字验证码

&lt;%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %&gt; &lt;%! //生成随机颜色 Color getRandColor(Random random,int fc,int bc) { if(fc&gt;255) fc=255; if(...

ZhangGuozhong's Blog 109

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

JSP 生成随机验证码图片

 Color getRandColor(int fc,int bc){//给定范围获得随机颜色Random random = new Random();if(fc>255) fc=255;if(bc>255) bc=255;int r=fc+random.nextInt(bc-fc);int g=fc+random.nextInt(bc-fc);int b=fc+random.nextI

244

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

JSP简单计算验证码生成

&lt;%@ page language="java" import="java.util.*" pageEncoding="utf-8"%&gt; &lt;%@ page contentType="image/jpeg" import="java.awt.*, java.awt.image.*,javax.imageio.*" %&gt; &lt;% /

318

用jsp做验证码

&lt;%@ page language="java" contentType="text/html; charset=GBK"%&gt;&lt;%@ page  import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %&gt;&lt;%!//给定范围获得随机颜色Color getRandColor(int fc,int ...

110

java验证码开发示例

验证码是一种区分用户是计算机还是人的公共全自动程序;可以防止恶意破解密码、刷票、论坛灌水、刷页、恶意注册、登录。 直接上代码 public static void main(String[] args) throws IOException { Random rand = new Random(); //画板 BufferedImage i = new BufferedImage(200, 100, 1); //画笔 va

weixin_57176230的博客 376
上一篇: 导出数据库数据的方法,适合简单的数据库表格结构
下一篇: 对HTML 通过GET 方法进行提交后,对信息进行解码JAVA类
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值