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

网站策划书的主题有哪些企业网站建设服务

网站策划书的主题有哪些,企业网站建设服务,javascript编程,襄阳最新消息背景 最近需要实现一个对于系统的授权检测功能,即当SpringBoot应用被启动时,需要当前设备是否具有有效的的授权许可信息,若无则直接退出应用。具体的实现方案请继续看下文。 环境 Ruoyi-Vue SpringBoot3 RuoYi-Vue: 🎉 基于Spr…

背景

最近需要实现一个对于系统的授权检测功能,即当SpringBoot应用被启动时,需要当前设备是否具有有效的的授权许可信息,若无则直接退出应用。具体的实现方案请继续看下文。

环境

Ruoyi-Vue SpringBoot3 RuoYi-Vue: 🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本 - Gitee.comicon-default.png?t=O83Ahttps://gitee.com/y_project/RuoYi-Vue/tree/springboot3/

初始实现

基于文章开头所提到需求,很容易想到可以在主启动类中编写相关代码来实现,由于我们需要的是在类加载初期校验,并且我们可能需要从配置文件中获取部分信息,因此需要使用如下方法来编写代码。

首先在当前主启动类所在的包下新建utils包,用于校验代码的编写,

新建校验工具类InitCheckUtil,代码如下

@Component
public class InitCheckUtil {@Value("${init.key}")private String key;@PostConstructpublic void check() {if (StringUtils.isBlank(key) || !"ruoyi".equals(key)) {System.out.println("系统未授权,请联系管理员");System.exit(0);}else{System.out.println("current key is: " + key + "system is authorized");}}
}

不难看出,这个校验工具的逻辑为,首先从配置文件(application.yml)中加载了init.key的值,配文件信息如下:

之后通过check方法来判断获取的key是否为 ruoyi ,若不满足条件则直接退出。执行代码后结果如下:

可以看到已经打印了当前key值,并表明系统已经进行了了授权。需要注意的是,这里的@PostConstruct注解确保了Spring容器启动时就会执行这个方法。

目前来看似乎已经完成了我们的需求,但是如果现在想要在项目启动前就执行呢,而不是等到容器加载时在校验,可以看到输出当前key信息之前已经有其它的日志信息,更为复杂的项目在启动时往往伴随着更多的前置初始化的东西,那么,如何在SpringBoot类启动前就进行校验呢?

ApplicationContextInitializer

上一小节我们已经实现了一个初步版本,而为了能够满足新的启动之前的即校验需求,我们需要做进一步的改动。首先可以想到的便是在主启动类中进行加载,直接在启动方法之前,使用创建InitCheckUtil对象的方式,然后调用其check方法。

如果此时直接启动项目,将会出现如下效果:

看起来似乎实现了启动前的校验,但是我们并没有更改配置文件中的key值,正常情况下服务应该是启动成功的状态。但目前状况的原因是由于我们现在的代码先于Spring容器执行,因此@Value注解将无法正常读取到key值,进而校验失败,因此InitCheckUtil类的代码变为:

public class InitCheckUtil {private String key;public InitCheckUtil(){}public InitCheckUtil(String key){this.key = key;}public void check() {if (StringUtils.isBlank(key) || !"ruoyi".equals(key)) {System.out.println("系统未授权,请联系管理员");System.exit(0);}else{System.out.println("current key is: " + key + ", system is authorized");}}
}

但由于没有了Spring容器的能力的加持,此时对于配置文件读取就无法直接使用@Value注解来获取了,因此我们现在使用使用一种新的方式来实现对配置文件的读取,即通过ApplicationContextInitializer 接口,它的作用在于当容器启动之前就可以读取配置文件中的值,从而满足我们当前的需求,具体实现如下,新建CheckConfigInitlnitializer类并实现 ApplicationContextInitializer 接口的 initialize 方法,在该方法中通过applicationContext获取ConfigurableEnvironment 对象,进而获取配置文件中的信息后传入校验类中实现校验:

public class CheckConfigInitializer implements ApplicationContextInitializer {@Overridepublic void initialize(ConfigurableApplicationContext applicationContext) {ConfigurableEnvironment environment = applicationContext.getEnvironment();String initKey = environment.getProperty("init.key");InitCheckUtil checkUtil = new InitCheckUtil(initKey);checkUtil.check();}
}

由于我们更改了配置文件的获取方式,因此主启动类的中内容也需要做相关的更改,如下所示增加了对于初始化器的注册,从而可以确保可以在整个容器启动之前完成校验。

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class RuoYiApplication
{public static void main(String[] args){SpringApplication application = new SpringApplication(RuoYiApplication.class);application.addInitializers(new CheckConfigInitializer());application.run( args);System.out.println("(♥◠‿◠)ノ゙  若依启动成功   ლ(´ڡ`ლ)゙  \n" +" .-------.       ____     __        \n" +" |  _ _   \\      \\   \\   /  /    \n" +" | ( ' )  |       \\  _. /  '       \n" +" |(_ o _) /        _( )_ .'         \n" +" | (_,_).' __  ___(_ o _)'          \n" +" |  |\\ \\  |  ||   |(_,_)'         \n" +" |  | \\ `'   /|   `-'  /           \n" +" |  |  \\    /  \\      /           \n" +" ''-'   `'-'    `-..-'              ");}
}

 此时系统可正常启动,并输出相应的校验信息如下

自动装配

在上一步中我们已经基本实现了对于文章开头提出需求问题的解决,但是若后续存在类似需求时需要我们不断往主主启动类中添加代码。这种方法看起来极为的不优雅,整个启动类会变得愈发臃肿。因此我们可以通过SpringBoot中的自动装配机制对上面的代码进行进一步的调整优化。

其实目前优化的方式严格意义上时上一步的另一种实现方式,这里将通过使用spring.factories文件来代替在主启动类中显式的注册初始化类。通过在项目当前模块的resources目录下新建META-INF 文件夹(不存在则新建),并新增 spring.factories 文件,该文件的内容将在Spring容器启动前进行扫描并加载,若为了实现通用性可将其迁移至common模块中,此处仅做展示用,方便起见未进行迁移。

 在spring.factories 文件中添加如下内容,其中 key 为 org.springframework.context.ApplicationContextInitialize 固定值,value 为我们自定义的实现的全包名。

org.springframework.context.ApplicationContextInitializer=com.ruoyi.utils.CheckConfigInitializer

这个时候就可以将启动类中的代码还原为原始的状态,再次启动程序后发现系统可以正常运行,其原理为,当SpringApplication初始化时通过SpringFactoriesLoader获取到配置在 META-INF/spring.factories 文件中的 ApplicationContextInitializer 的所有实现类,进而加载到容器中,而在这个过程中将实现对了系统启动的初步校验。

http://www.hkea.cn/news/107983/

相关文章:

  • 网站怎么设置支付功能企业网站的主要类型有
  • 成都圣都装饰装修公司北京搜索优化排名公司
  • 境外建设网站贴吧互联网域名注册查询
  • 广州建站工作室淘客推广怎么做
  • 中国最大的网站建设公司百度广告联盟点击一次多少钱
  • wordpress单页主题营销seo手机关键词网址
  • dedecms做电影网站韩国最新新闻
  • 哪个网站做废旧好如何在百度上发布自己的广告
  • 网站表单及商品列表详情模板如何搭建自己的网站
  • 网站域名登记证明百度高级搜索怎么用
  • 国外网站在国内做镜像站点网站搭建费用
  • 网站后台如何添加关键词软件开发公司
  • 手机做网站的网站windows优化大师卸载不了
  • 万网速成网站有哪些 功能自己的网站怎么推广
  • 邯郸哪有做网站的河南百度推广公司
  • 我是做环保类产品注册哪些浏览量大的网站推销自己的产品比较好呢西安网站seo优化公司
  • 网页传奇游戏排行昆明网络推广优化
  • 商城模板网站模板网站软文是什么
  • 校园网站推广方案怎么做网站排名推广工具
  • 深圳罗湖企业网站建设报价网络媒体发稿平台
  • 用别人公司域名做网站线下推广的渠道和方法
  • php mysql的网站开发外贸推广平台
  • 济南网站建设认可搜点网络能百度指数有三个功能模块
  • 网上商城网站建设意义在线代理浏览网页
  • 网站图片切换代码百度下载并安装最新版
  • 微信公众平台号申请注册入口杭州seo公司
  • 本周实时热点新闻事件seo文章代写一篇多少钱
  • 旺店通app手机企业版下载网站seo如何优化
  • 宝山区建设用地事务所网站网络公司有哪些
  • 用sql做简单的博客网站大连谷歌seo