SpringSecurity短信验证码及图片验证码代码优化

1、优化思路

上节将到的短信验证码,图片验证码整个思路基本一样,代码也差不多,这节我们对相同的代码进行抽取处理,整个思路如下:
在这里插入图片描述

ValidateCodeController 来接收验证码请求,通过参数type来区分,ValidateCodeProcessor 用来处理(交给子类),AbstractValidateCodeProcessor抽象类主要把生成验证码的通用步骤抽取出来,1.生成验证码 2.保存验证码,3发送验证码;
1.生成验证码教给ValidateCodeGenerator 的子类来实现;
2.保存验证码,都一样直接AbstractValidateCodeProcessor中实现
3.发送验证码AbstractValidateCodeProcessor的子类来实现

2.代码

ValidateCodeController
在这里插入图片描述

ValidateCodeProcessorHolder

在这里插入图片描述

ValidateCodeProcessor

在这里插入图片描述
AbstractValidateCodeProcessor

public abstract class AbstractValidateCodeProcessor<T extends ValidateCode> implements ValidateCodeProcessor{


   public final static String SESSION_KEY = "SESSION_KEY_FOR_CODE_";

    @Autowired
    private Map<String,ValidateCodeGenerator> codeGenerator;


    private SessionStrategy sessionStrategy = new HttpSessionSessionStrategy();

    @Override
    public void create(ServletWebRequest request) throws Exception {
        //1.生成验证码
        T code = generator(request);

        //2.保存验证码
        save(request,code);

        //3.发送验证码

        send(request,code);

    }

    public abstract void send(ServletWebRequest request,T code) throws Exception;


    private void save(ServletWebRequest request,T code) {
        sessionStrategy.setAttribute(request,getSessionKey(request),code);
    }

    public String getSessionKey(ServletWebRequest request) {
        String type = getValidateCodeType(request).toString().toUpperCase();
        return SESSION_KEY + type;
    }

    private  T generator(ServletWebRequest request){
        ValidateCodeType validateCodeType = getValidateCodeType(request);
        String typeName = validateCodeType.toString().toLowerCase();
        String generatorName = typeName + "CodeGenerator";
        ValidateCodeGenerator generator = codeGenerator.get(generatorName);
        ValidateCode code = generator.createCode();
        return (T)code;
    };


    private ValidateCodeType getValidateCodeType(ServletWebRequest request){

        String type = StringUtils.substringBefore(this.getClass().getSimpleName(), "CodeProcessor");
        ValidateCodeType validateCodeType = ValidateCodeType.valueOf(type.toUpperCase());
        return validateCodeType;
    }


}

ImageCodeProcessor

在这里插入图片描述

SmsCodeProcessor

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值