7.6 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. 必须用中文回复我
Project Overview
tianai-captcha (天爱验证码/TAC) is a Java-based behavioral CAPTCHA library supporting multiple verification types:
- SLIDER: Slide-to-fit puzzle captcha
- ROTATE: Rotation verification captcha
- CONCAT: Slide-to-restore captcha
- WORD_IMAGE_CLICK: Text-click verification captcha
The project is a multi-module Maven project with Java 8 compatibility.
Build Commands
# Build the entire project (skips tests by default)
mvn clean install
# Build without skipping tests
mvn clean install -DskipTests=false
# Build specific module
cd tianai-captcha
mvn clean install
# Package for deployment
mvn clean package
# Generate javadoc
mvn javadoc:javadoc
Testing
# Run all tests
mvn test
# Run tests for specific module
cd tianai-captcha
mvn test
# Run a specific test class
mvn test -Dtest=TACBuilderTest
# Run a specific test method
mvn test -Dtest=TACBuilderTest#testMethod
Project Structure
Modules
-
tianai-captcha (core module)
- Core captcha generation and validation logic
- Generator implementations for each captcha type
- Resource management system
- Cache and storage abstractions
-
tianai-captcha-springboot-starter
- Spring Boot auto-configuration
- Redis integration support
- Configuration properties binding
-
tianai-captcha-solon-plugin
- Solon framework integration
-
tianai-captcha-web-sdk
- Frontend JavaScript SDK
Core Architecture
Key Components
ImageCaptchaApplication (cloud.tianai.captcha.application.ImageCaptchaApplication)
- Main entry point for captcha operations
- Handles captcha generation via
generateCaptcha(type) - Handles validation via
matching(id, matchParam) - Manages lifecycle of generators, validators, and cache
TACBuilder (cloud.tianai.captcha.application.TACBuilder)
- Builder pattern for constructing ImageCaptchaApplication
- Fluent API for configuration
- Key methods:
addDefaultTemplate(): Load built-in templatesaddResource(type, resource): Add background imagesaddTemplate(type, resourceMap): Add custom templatesaddFont(resource): Add fonts for WORD_IMAGE_CLICKcached(size, waitTime, period, expireTime): Enable pre-generation cachesetCacheStore(store): Set cache implementation (local or distributed)setResourceStore(store): Set resource storagesetTransform(transform): Set image transformation (default: Base64)
Generator Layer
MultiImageCaptchaGenerator (cloud.tianai.captcha.generator.impl.MultiImageCaptchaGenerator)
- Delegates to specific generators based on captcha type
- Manages resource loading and image transformation
Specific Generators:
StandardSliderImageCaptchaGenerator: Generates slider puzzlesStandardRotateImageCaptchaGenerator: Generates rotation captchasStandardConcatImageCaptchaGenerator: Generates slide-to-restore captchasStandardWordClickImageCaptchaGenerator: Generates text-click captchas
CacheImageCaptchaGenerator (cloud.tianai.captcha.generator.impl.CacheImageCaptchaGenerator)
- Wrapper that pre-generates captchas for improved performance
- Configurable cache size and refresh intervals
Validator Layer
ImageCaptchaValidator (cloud.tianai.captcha.validator.ImageCaptchaValidator)
- Interface for captcha validation logic
- Default implementation:
SimpleImageCaptchaValidator
BasicCaptchaTrackValidator (cloud.tianai.captcha.validator.impl.BasicCaptchaTrackValidator)
- Validates mouse/touch track data
- Checks for suspicious behavior patterns
Resource Management
ResourceStore (cloud.tianai.captcha.resource.ResourceStore)
- Abstraction for storing captcha resources (images, templates)
- Implementations:
LocalMemoryResourceStore: In-memory storage- Custom implementations for distributed scenarios
ImageCaptchaResourceManager (cloud.tianai.captcha.resource.ImageCaptchaResourceManager)
- Manages resource loading and retrieval
- Default implementation:
DefaultImageCaptchaResourceManager
Resource (cloud.tianai.captcha.resource.common.model.dto.Resource)
- Represents a resource with type and location
- Types: "classpath", "file", "url"
Cache Layer
CacheStore (cloud.tianai.captcha.cache.CacheStore)
- Abstraction for caching captcha data
- Implementations:
LocalCacheStore: Local in-memory cache- Redis-based implementation in Spring Boot starter
Image Transformation
ImageTransform (cloud.tianai.captcha.generator.ImageTransform)
- Converts generated images to desired format
- Default:
Base64ImageTransform(JPG for background, PNG for template)
Configuration
Non-Spring Projects
Use TACBuilder to configure:
ImageCaptchaApplication app = TACBuilder.builder()
.addDefaultTemplate()
.addResource("SLIDER", new Resource("classpath", "path/to/image.jpg"))
.cached(20, 5000, 2000, 120000L)
.build();
Spring Boot Projects
Configure via application.yml:
captcha:
prefix: captcha # Cache key prefix
expire:
default: 120000 # Default expiration (ms)
WORD_IMAGE_CLICK: 180000 # Type-specific expiration
init-default-resource: false # Load built-in resources
local-cache-enabled: true # Enable pre-generation cache
local-cache-size: 20 # Cache size
local-cache-wait-time: 5000 # Wait time on cache miss (ms)
local-cache-period: 2000 # Cache refresh interval (ms)
font-path: # Font files for WORD_IMAGE_CLICK
- classpath:font/simhei.ttf
Important Constants
CaptchaTypeConstant (cloud.tianai.captcha.common.constant.CaptchaTypeConstant)
SLIDER: Slide-to-fit captchaROTATE: Rotation captchaCONCAT: Slide-to-restore captchaWORD_IMAGE_CLICK: Text-click captcha
ParamKeyEnum (cloud.tianai.captcha.generator.common.model.dto.ParamKeyEnum)
TOLERANT: Configurable tolerance value for validation (added in recent commit)
Key Data Flow
Generation Flow
- Client calls
ImageCaptchaApplication.generateCaptcha(type) MultiImageCaptchaGeneratorselects appropriate generator- Generator loads resources via
ImageCaptchaResourceManager - Generator creates captcha with random parameters
ImageTransformconverts images to Base64 (or custom format)- Captcha data cached in
CacheStorewith unique ID - Returns
ImageCaptchaVOwith ID and image data
Validation Flow
- Client submits ID and track data via
matching(id, matchParam) - Application retrieves cached captcha data by ID
ImageCaptchaValidatorvalidates track against expected answerBasicCaptchaTrackValidatorchecks track behavior patterns- Returns
ApiResponsewith success/failure status
Extension Points
- Custom Generators: Implement
ImageCaptchaGeneratorinterface - Custom Validators: Implement
ImageCaptchaValidatorinterface - Custom Cache: Implement
CacheStore(e.g., Redis, Memcached) - Custom Resources: Implement
ResourceStorefor centralized resource management - Custom Transform: Implement
ImageTransformfor different image formats - Interceptors: Implement
CaptchaInterceptorfor pre/post processing
Recent Changes
- Added support for Spring Boot 4 (commit:
db0603a,7c8730f) - Fixed resource leak issues (commits:
16e517c,29279e8) - Added configurable tolerance value via
ParamKeyEnum.TOLERANT(commit:a4f8a99)
Documentation
- Online Demo: http://captcha.tianai.cloud
- Online Documentation: http://doc.captcha.tianai.cloud
- License: MulanPSL-2.0