Security--05(图形验证码功能重构)

目录

 

1.可提取的验证码配置

     2.验证码的基本参数可配

  3.验证码的生成逻辑可配置


1.可提取的验证码配置

   1.1验证码的长宽,以及位数,以及过期时间,拦截的接口都是可配置的。

   1.2拦截的接口可配置,这样可以配置哪些服务需要验证码

   1.3验证码的生成逻辑可以配置

   

   图形验证码采用三级配置:

  

   默认配置封装:封装图形验证码的配置类:ImageCodePropertites  需要考虑到短信验证码 ValidateCodeProperties,

     2.验证码的基本参数可配

     图形验证码的配置类和验证码配置类:

package org.lilly.core.properties;

/**
 * User: Mr.Wang
 * Date: 2020/6/11
 * 图形验证码的配置类和他的默认配置
 */
public class ImageCodePropertites {
    private int width = 67;
    private int height = 23;
    private int length = 4;
    private int expireTime = 60;
    

    public int getWidth() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public int getLength() {
        return length;
    }

    public void setLength(int length) {
        this.length = length;
    }

    public int getExpireTime() {
        return expireTime;
    }

    public void setExpireTime(int expireTime) {
        this.expireTime = expireTime;
    }
}
public class ValidateCodeProperties {
    private ImageCodePropertites imageCode = new ImageCodePropertites();

    public ImageCodePropertites getImageCode() {
        return imageCode;
    }

    public void setImageCode(ImageCodePropertites imageCode) {
        this.imageCode = imageCode;
    }
}

 有了配置类就可以去替换掉代码里面写死的参数:

   验证码的拦截路径可配置(目前暂时不支持),因为在Springboot的控制器中如果return 返回templates文件的名字会再次被Security拦截,走他的配置的loginPage逻辑,对于验验证码的逻辑,每个请求会发两次,第一次的时候url是0,第二次的时候url才有值。然后登陆失败了他还要去走一遍loginPage. validateCodeFilter.afterPropertiesSet();

  

 登陆成功返回JSON:

   至此验证码参数可配做完了

  3.验证码的生成逻辑可配置

  这里是高级的开发人员要掌握的一个常见的开发技巧,叫做以增量的方式去适应变化,

 首先会提供一个生成验证码的接口:

 

 然后会有一个默认的实现:需要注意的是这个Bean没有直接交给Spring去管理,而是通过配置Bean的方式交给Spring去管理,这样做的好处就是,可以条件配置这个Bean

 

 

 这样的话我再demo项目中去配置一个名字为validateImageGenerator的Bean就可以实现覆盖默认配置的逻辑。

至此验证码的重构功能完成。

  

猜你喜欢

转载自blog.csdn.net/weixin_37650458/article/details/106677669