当前位置: 首页 > article >正文

16. @PostConstruct注解和开关原理(验证码开关、IP开关)

1►@PostConstruct注解

@PostConstruct是java自带的注解,会在java项目启动的时候先执行下面的方法

2►开关原理(验证码开关)    

我们的项目具有验证码功能,旧版不支持关闭,新版已经支持关闭了。

我们打开页面“参数管理”,所谓参数管理,就是在系统运行起来的时候,可以动态修改一些值,这些值会被系统实时修改,下次如果需要读值,则会是最新的值。

对于验证码而言,可以将下面的参数值修改为false即可:

图片

重新登录发现确实没有验证码了??????真神奇呢??

我们直接看一下为啥没有了,上源码!

前端关键代码:

getCode() {
 getCodeImg().then(res => {
   this.captchaOnOff = res.captchaOnOff === undefined ? true : res.captchaOnOff;
   if (this.captchaOnOff) {
     this.codeUrl = "data:image/gif;base64," + res.img;
     this.loginForm.uuid = res.uuid;
   }
 });
},

后端关键代码:

 @GetMapping("/captchaImage")
    public AjaxResult getCode(HttpServletResponse response) throws IOException
{
        AjaxResult ajax = AjaxResult.success();
        boolean captchaOnOff = configService.selectCaptchaOnOff();
        ajax.put("captchaOnOff", captchaOnOff);
        if (!captchaOnOff)
        {
            return ajax;
        }

        // 保存验证码信息
        String uuid = IdUtils.simpleUUID();
        String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;

        String capStr = null, code = null;
        BufferedImage image = null;

        // 生成验证码
        String captchaType = RuoYiConfig.getCaptchaType();
        if ("math".equals(captchaType))
        {
            String capText = captchaProducerMath.createText();
            capStr = capText.substring(0, capText.lastIndexOf("@"));
            code = capText.substring(capText.lastIndexOf("@") + 1);
            image = captchaProducerMath.createImage(capStr);
        }
        else if ("char".equals(captchaType))
        {
            capStr = code = captchaProducer.createText();
            image = captchaProducer.createImage(capStr);
        }

        redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
        // 转换流信息写出
        FastByteArrayOutputStream os = new FastByteArrayOutputStream();
        try
        {
            ImageIO.write(image, "jpg", os);
        }
        catch (IOException e)
        {
            return AjaxResult.error(e.getMessage());
        }

        ajax.put("uuid", uuid);
        ajax.put("img", Base64.encode(os.toByteArray()));
        return ajax;
    }

3►开关原理(IP开关)    

上一种验证码开关是在参数设置里面设置的,随着程序运行之后,也能随时改。主要通过redis实现。

那么,IP开关呢?IP开关在YML,主要是用来看日志的时候能不能看到公网IP。

IP开关通过YML文件中写死实现,也就是说,一旦程序启动,就改不了了。

效果:是否显示ip的地址


http://www.kler.cn/news/134034.html

相关文章:

  • 流量4----4
  • 【Java 进阶篇】JQuery 事件绑定:`on` 与 `off` 的奇妙舞曲
  • fully_connected与linear
  • C++学习 --vector
  • Linux 零拷贝splice函数
  • 【C++】入门三
  • DeepMind发布新模型Mirasol3B:更高效处理音频、视频数据
  • 竞赛选题 深度学习花卉识别 - python 机器视觉 opencv
  • ExoPlayer架构详解与源码分析(9)——TsExtractor
  • 【Synopsys Bug记录】DC综合报错(显示warning:Unable to resolve reference)
  • DrugMAP: molecular atlas and pharma-information of all drugs学习
  • transform学习资料
  • LLM大模型4位量化实战【GPTQ】
  • Linux 配置RealVNC远程访问
  • 中国制库:创新引领,效率突破,塑造行业新标准
  • redis三种集群方式
  • 21、嵌套路由实战操作
  • Smart Tomcat的使用
  • FastJsonAPI
  • 系列二十六、idea安装javap -c
  • Linux服务器挂载另一台服务器的文件夹(mount)
  • 力扣刷题篇之位运算
  • 力扣83. 删除排序链表中的重复元素(java常规解法 + 建立虚拟头节点)
  • springBoot 配置druid多数据源 MySQL+SQLSERVER
  • sqli-labs关卡20(基于http头部报错盲注)通关思路
  • vite vue3安装element-plus
  • 【开源】基于Vue.js的开放实验室管理系统的设计和实现
  • 【Java 进阶篇】Ajax 入门:打开前端异步交互的大门
  • 【Kingbase FlySync】命令模式:部署双轨并行,并实现切换同步
  • Git 简介及使用