mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 02:08:43 +08:00 
			
		
		
		
	验证码类型支持(数组计算、字符验证)
This commit is contained in:
		| @@ -0,0 +1,83 @@ | ||||
| package com.ruoyi.framework.config; | ||||
|  | ||||
| import java.util.Properties; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| import com.google.code.kaptcha.impl.DefaultKaptcha; | ||||
| import com.google.code.kaptcha.util.Config; | ||||
| import static com.google.code.kaptcha.Constants.*; | ||||
|  | ||||
| /** | ||||
|  * 验证码配置 | ||||
|  *  | ||||
|  * @author ruoyi | ||||
|  */ | ||||
| @Configuration | ||||
| public class CaptchaConfig | ||||
| { | ||||
|     @Bean(name = "captchaProducer") | ||||
|     public DefaultKaptcha getKaptchaBean() | ||||
|     { | ||||
|         DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); | ||||
|         Properties properties = new Properties(); | ||||
|         // 是否有边框 默认为true 我们可以自己设置yes,no | ||||
|         properties.setProperty(KAPTCHA_BORDER, "yes"); | ||||
|         // 验证码文本字符颜色 默认为Color.BLACK | ||||
|         properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black"); | ||||
|         // 验证码图片宽度 默认为200 | ||||
|         properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160"); | ||||
|         // 验证码图片高度 默认为50 | ||||
|         properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60"); | ||||
|         // 验证码文本字符大小 默认为40 | ||||
|         properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "38"); | ||||
|         // KAPTCHA_SESSION_KEY | ||||
|         properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCode"); | ||||
|         // 验证码文本字符长度 默认为5 | ||||
|         properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4"); | ||||
|         // 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) | ||||
|         properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier"); | ||||
|         // 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy | ||||
|         properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy"); | ||||
|         Config config = new Config(properties); | ||||
|         defaultKaptcha.setConfig(config); | ||||
|         return defaultKaptcha; | ||||
|     } | ||||
|  | ||||
|     @Bean(name = "captchaProducerMath") | ||||
|     public DefaultKaptcha getKaptchaBeanMath() | ||||
|     { | ||||
|         DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); | ||||
|         Properties properties = new Properties(); | ||||
|         // 是否有边框 默认为true 我们可以自己设置yes,no | ||||
|         properties.setProperty(KAPTCHA_BORDER, "yes"); | ||||
|         // 边框颜色 默认为Color.BLACK | ||||
|         properties.setProperty(KAPTCHA_BORDER_COLOR, "105,179,90"); | ||||
|         // 验证码文本字符颜色 默认为Color.BLACK | ||||
|         properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "blue"); | ||||
|         // 验证码图片宽度 默认为200 | ||||
|         properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160"); | ||||
|         // 验证码图片高度 默认为50 | ||||
|         properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60"); | ||||
|         // 验证码文本字符大小 默认为40 | ||||
|         properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "35"); | ||||
|         // KAPTCHA_SESSION_KEY | ||||
|         properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCodeMath"); | ||||
|         // 验证码文本生成器 | ||||
|         properties.setProperty(KAPTCHA_TEXTPRODUCER_IMPL, "com.ruoyi.framework.config.KaptchaTextCreator"); | ||||
|         // 验证码文本字符间距 默认为2 | ||||
|         properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_SPACE, "3"); | ||||
|         // 验证码文本字符长度 默认为5 | ||||
|         properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "6"); | ||||
|         // 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) | ||||
|         properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier"); | ||||
|         // 验证码噪点颜色 默认为Color.BLACK | ||||
|         properties.setProperty(KAPTCHA_NOISE_COLOR, "white"); | ||||
|         // 干扰实现类 | ||||
|         properties.setProperty(KAPTCHA_NOISE_IMPL, "com.google.code.kaptcha.impl.NoNoise"); | ||||
|         // 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy | ||||
|         properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy"); | ||||
|         Config config = new Config(properties); | ||||
|         defaultKaptcha.setConfig(config); | ||||
|         return defaultKaptcha; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,75 @@ | ||||
| package com.ruoyi.framework.config; | ||||
|  | ||||
| import java.util.Random; | ||||
| import com.google.code.kaptcha.text.impl.DefaultTextCreator; | ||||
|  | ||||
| /** | ||||
|  * 验证码文本生成器 | ||||
|  *  | ||||
|  * @author ruoyi | ||||
|  */ | ||||
| public class KaptchaTextCreator extends DefaultTextCreator | ||||
| { | ||||
|     private static final String[] CNUMBERS = "0,1,2,3,4,5,6,7,8,9,10".split(","); | ||||
|  | ||||
|     @Override | ||||
|     public String getText() | ||||
|     { | ||||
|         Integer result = 0; | ||||
|         Random random = new Random(); | ||||
|         int x = random.nextInt(10); | ||||
|         int y = random.nextInt(10); | ||||
|         StringBuilder suChinese = new StringBuilder(); | ||||
|         int randomoperands = (int) Math.round(Math.random() * 2); | ||||
|         if (randomoperands == 0) | ||||
|         { | ||||
|             result = x * y; | ||||
|             suChinese.append(CNUMBERS[x]); | ||||
|             suChinese.append("*"); | ||||
|             suChinese.append(CNUMBERS[y]); | ||||
|         } | ||||
|         else if (randomoperands == 1) | ||||
|         { | ||||
|             if (!(x == 0) && y % x == 0) | ||||
|             { | ||||
|                 result = y / x; | ||||
|                 suChinese.append(CNUMBERS[y]); | ||||
|                 suChinese.append("/"); | ||||
|                 suChinese.append(CNUMBERS[x]); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 result = x + y; | ||||
|                 suChinese.append(CNUMBERS[x]); | ||||
|                 suChinese.append("+"); | ||||
|                 suChinese.append(CNUMBERS[y]); | ||||
|             } | ||||
|         } | ||||
|         else if (randomoperands == 2) | ||||
|         { | ||||
|             if (x >= y) | ||||
|             { | ||||
|                 result = x - y; | ||||
|                 suChinese.append(CNUMBERS[x]); | ||||
|                 suChinese.append("-"); | ||||
|                 suChinese.append(CNUMBERS[y]); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 result = y - x; | ||||
|                 suChinese.append(CNUMBERS[y]); | ||||
|                 suChinese.append("-"); | ||||
|                 suChinese.append(CNUMBERS[x]); | ||||
|             } | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             result = x + y; | ||||
|             suChinese.append(CNUMBERS[x]); | ||||
|             suChinese.append("+"); | ||||
|             suChinese.append(CNUMBERS[y]); | ||||
|         } | ||||
|         suChinese.append("=?@" + result); | ||||
|         return suChinese.toString(); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 RuoYi
					RuoYi