shikeyin
2024-01-11 65da8373531677b1c37a98f53eaa30c892f35e5a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package com.iplatform.base.config;
 
import com.iplatform.base.captcha.BlockPuzzleCaptchaProvider;
import com.iplatform.base.captcha.JigsawCaptchaProvider;
import com.iplatform.base.captcha.SmsCaptchaProvider;
import com.iplatform.core.PlatformConfiguration;
import com.walker.cache.CacheProvider;
import com.walker.infrastructure.utils.ClassUtils;
import com.walker.infrastructure.utils.StringUtils;
import com.walker.push.PushManager;
import com.walker.web.CaptchaProvider;
import com.walker.web.CaptchaResult;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
import java.lang.reflect.Constructor;
 
@Configuration
public class CaptchaConfig extends PlatformConfiguration {
 
    @Bean
    public CaptchaProperties captchaProperties(){
        return new CaptchaProperties();
    }
 
    /**
     * 移动端使用的拼图验证组件实现,目前想替换已有老的,PC端正在尝试替换。
     * @param captchaCacheProvider
     * @return
     * @date 2023-06-27
     */
    @Bean
    public BlockPuzzleCaptchaProvider blockPuzzleCaptchaProvider(CacheProvider<String> captchaCacheProvider){
        BlockPuzzleCaptchaProvider captchaProvider = new BlockPuzzleCaptchaProvider();
        captchaProvider.setCaptchaCacheProvider(captchaCacheProvider);
        return captchaProvider;
    }
 
    /**
     * 拼图滑块验证,提供者定义。
     * @return
     * @date 2023-04-06
     * @date 2023-06-27 准备使用新的:JigsawMobile拼图验证组件替换该组件。
     */
    @Deprecated
    @Bean
    public JigsawCaptchaProvider jigsawCaptchaProvider(CacheProvider<String> captchaCacheProvider){
        JigsawCaptchaProvider jigsawCaptchaProvider = new JigsawCaptchaProvider();
        jigsawCaptchaProvider.setCaptchaCacheProvider(captchaCacheProvider);
        return jigsawCaptchaProvider;
    }
 
    /**
     * 短信验证码生成提供者。
     * @return
     * @date 2023-01-27
     * @date 2023-04-25 重构对象,底层推送由'PushManger'完成。
     */
    @Bean("smsCaptchaProvider")
    public SmsCaptchaProvider smsCaptchaProvider(PushManager pushManager){
        SmsCaptchaProvider smsCaptchaProvider = new SmsCaptchaProvider();
        smsCaptchaProvider.setPushManager(pushManager);
        return smsCaptchaProvider;
    }
//    public CaptchaProvider<CaptchaResult> smsCaptchaProvider(CaptchaProperties captchaProperties){
//        String smsCaptchaClass = captchaProperties.getSmsCaptchaClass();
//        if(StringUtils.isEmpty(smsCaptchaClass)){
//            throw new IllegalArgumentException("短信验证码提供者类未配置: CaptchaProperties --> smsCaptchaClass");
//        }
//        try {
//            logger.info("创建'短信验证码提供者' = " + smsCaptchaClass);
//            Class<?> captchaProviderClass = ClassUtils.forName(smsCaptchaClass, CaptchaConfig.class.getClassLoader());
//            Constructor<CaptchaProvider<CaptchaResult>> constructor = (Constructor<CaptchaProvider<CaptchaResult>>)captchaProviderClass.getConstructor();
//            return constructor.newInstance();
//        } catch (Exception e) {
//            throw new RuntimeException("创建'短信验证码'提供者实例异常:" + e.getMessage(), e);
//        }
//    }
 
    /**
     * 简单图像验证码生成提供者
     * @return
     * @author 时克英
     * @date 2022-11-06
     * @date 2023-01-27 通过配置文件,动态创建提供者对象。
     */
    @Bean("imageCaptchaProvider")
    public CaptchaProvider<CaptchaResult> imageCaptchaProvider(CaptchaProperties captchaProperties){
        String imageCaptchaClass = captchaProperties.getImageCaptchaClass();
        if(StringUtils.isEmpty(imageCaptchaClass)){
            throw new IllegalArgumentException("图像验证码提供者类未配置: CaptchaProperties --> imageCaptchaClass");
        }
        try {
            logger.info("创建'图像验证码提供者' = " + imageCaptchaClass);
            Class<?> captchaProviderClass = ClassUtils.forName(imageCaptchaClass, CaptchaConfig.class.getClassLoader());
            Constructor<CaptchaProvider<CaptchaResult>> constructor = (Constructor<CaptchaProvider<CaptchaResult>>)captchaProviderClass.getConstructor();
            return constructor.newInstance();
        } catch (Exception e) {
            throw new RuntimeException("创建'图像验证码'提供者实例异常:" + e.getMessage(), e);
        }
//        return new SimpleKaptchaProvider();
    }
}