package com.aisi.template.annotation; import jakarta.validation.Constraint; import jakarta.validation.Payload; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 强密码验证注解 * 验证密码是否符合安全要求 * * 默认要求: * - 至少 8 个字符 * - 包含至少一个大写字母 * - 包含至少一个小写字母 * - 包含至少一个数字 * - 包含至少一个特殊字符 * * 使用示例: *
 * @StrongPassword(
 *     minLength = 10,
 *     requireUppercase = true,
 *     requireLowercase = true,
 *     requireDigit = true,
 *     requireSpecialChar = true
 * )
 * private String password;
 * 
* * @author Claude * @since 2024-04-09 */ @Target({ElementType.FIELD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = PasswordValidator.class) public @interface StrongPassword { /** * 错误消息 * - 默认:"密码必须至少8个字符,包含大小写字母、数字和特殊字符" */ String message() default "密码必须至少8个字符,包含大小写字母、数字和特殊字符"; /** * 分组 */ Class[] groups() default {}; /** * 负载 */ Class[] payload() default {}; /** * 最小密码长度 * - 默认:8 */ int minLength() default 8; /** * 是否需要大写字母 * - 默认:true */ boolean requireUppercase() default true; /** * 是否需要小写字母 * - 默认:true */ boolean requireLowercase() default true; /** * 是否需要数字 * - 默认:true */ boolean requireDigit() default true; /** * 是否需要特殊字符 * - 默认:true * - 特殊字符包括:!@#$%^&*()_+-=[]{}|;:,.<>? */ boolean requireSpecialChar() default true; }