<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      springboot~繼承EnvironmentPostProcessor實現對敏感配置的處理

      配置文件中的敏感信息,如密碼,賬號這些都應該是秘文的,在程序獲取時,再將它們動態解密,這樣保證了配置信息的安全;在springboot中,有個resources\META-INF\spring.factories文件,他幫我們完成了自動裝配,開發過starter包的同學應該不會陌生,而在這個文件里,我們也可以添加自定義的環境攔截器,對環境變量,配置信息等進行處理。

      執行時機

      EnvironmentPostProcessor 的實現類在 Spring Boot 應用程序啟動過程中的早期階段被加載和執行。具體來說,它們在 Spring Boot 的應用程序上下文創建之前執行。

      加載 EnvironmentPostProcessor 的實現類的過程如下:

      1. Spring Boot 應用程序啟動時,首先會加載并創建一個初始的環境(ConfigurableEnvironment)。

      2. 在初始化環境后,Spring Boot 會掃描 classpath 中的 META-INF/spring.factories 文件,以查找并加載配置在其中的 EnvironmentPostProcessor 實現類。

      3. 一旦找到這些實現類,它們將被實例化和執行。在這個階段,你可以在應用程序環境加載之前進行一些自定義的配置或修改。

      這使得 EnvironmentPostProcessor 成為一個非常早期的擴展點,允許你在應用程序環境初始化之前介入,并根據需要修改屬性源、配置屬性等。這對于在應用程序啟動時執行高級的自定義配置非常有用。

      starter中的注冊

      spring.factories 是 Spring Boot 中的一個特殊配置文件,用于自動裝配(auto-configuration)和其他 Spring Boot 特性的配置。在 spring.factories 文件中,你可以指定各種 Spring Boot 自動配置和其他擴展的類,包括 EnvironmentPostProcessor。

      EnvironmentPostProcessor 是 Spring Boot 的一個擴展點,用于在 Spring 應用程序的環境(Environment)加載之后進行額外的自定義配置。具體來說,EnvironmentPostProcessor 允許你在 Spring Boot 應用程序啟動時修改環境屬性,這對于一些高級配置需求非常有用。

      通過在 spring.factories 中配置 EnvironmentPostProcessor,你可以實現一些高級的環境配置,例如根據特定條件動態修改屬性值,或者加載外部配置源。這為應用程序提供了更大的靈活性,允許你在應用程序啟動之前對環境進行精細的調整。

      # Auto Configure
      org.springframework.boot.env.EnvironmentPostProcessor=\
        com.lind.common.env.MpwEnvironmentPostProcessor
      

      自定義EnvironmentPostProcessor類,對敏感字符進行解密

      /**
       * 處理配置中的敏感信息,讀配置時完成解密操作.
       *
       * @author lind
       * @date 2023/10/9 8:33
       * @since 1.0.0
       */
      public class EnvironmentPostProcessorDemo implements EnvironmentPostProcessor {
      
      	static final String MPW = "mpw.key";
      	static Logger logger = LoggerFactory.getLogger(EnvironmentPostProcessorDemo.class);
      
      	public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
      		String mpwKey = null;
      		for (PropertySource<?> ps : (Iterable<PropertySource<?>>) environment.getPropertySources()) {
      			if (ps instanceof SimpleCommandLinePropertySource) { // jvm啟動時命令行參數
      				SimpleCommandLinePropertySource source = (SimpleCommandLinePropertySource) ps;
      				mpwKey = source.getProperty(MPW);
      				break;
      			}
      			if (ps instanceof OriginTrackedMapPropertySource) {// application.yml
      				OriginTrackedMapPropertySource source = (OriginTrackedMapPropertySource) ps;
      				if (source.containsProperty(MPW))
      					mpwKey = source.getProperty(MPW).toString();
      				break;
      			}
      		}
      
      		if (StringUtils.isNotBlank(mpwKey)) {
      			HashMap<String, Object> map = new HashMap<>();
      			for (PropertySource<?> ps : (Iterable<PropertySource<?>>) environment.getPropertySources()) {
      				if (ps instanceof OriginTrackedMapPropertySource) {
      					OriginTrackedMapPropertySource source = (OriginTrackedMapPropertySource) ps;
      					for (String name : source.getPropertyNames()) {
      						Object value = source.getProperty(name);
      						if (value instanceof String) {
      							String str = (String) value;
      							if (str.startsWith("mpw:")) {
      								String decrypt = AESNetUtils.decrypt(str.substring(4), mpwKey);
      								map.put(name,decrypt );
      
      							}
      						}
      					}
      				}
      			}
      
      			if (MapUtils.isNotEmpty(map))
      				environment.getPropertySources()
      						.addFirst((PropertySource) new MapPropertySource("custom-encrypt", map));
      		}
      	}
      
      }
      
      

      使用

      • application.yml
      mpw:
        key: lind123456123456
      
      author:
        name: mpw:vpTzfVrH5eEbsFmSJO9bSw==
        nationality: mpw:vFLIjoQXy4Pzo1/hOm8hWw==
      
      • 單元測試代碼
      
      @Test
      public void mpwTest() {
      	// AESNetUtils.encrypt("中國人", "lind123456123456");//vFLIjoQXy4Pzo1/hOm8hWw==
      	System.out.println(SpringContextUtils.getEnvironment().getProperty("author.name"));
      	System.out.println(SpringContextUtils.getEnvironment().getProperty("author.nationality"));
      }
      	
      
      • 測試結果
      posted @ 2023-10-09 10:38  張占嶺  閱讀(847)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 中文字幕日韩一区二区不卡| 玩弄漂亮少妇高潮白浆| 伊人久久大香线蕉av色婷婷色| 怡红院一区二区三区在线| 四虎在线成人免费观看| 成全影院电视剧在线观看| 非会员区试看120秒6次| 久久夜色精品国产亚洲av| 日韩精品一区二区三区蜜臀| xxxx丰满少妇高潮| 察哈| 久久久久亚洲精品无码系列 | 少妇私密会所按摩到高潮呻吟| 日本高清在线观看WWW色| 久久人妻精品国产| 少妇无码AV无码专区| 丁香婷婷在线观看| 亚洲av成人一区国产精品| 国产无遮挡无码视频在线观看 | 国厂精品114福利电影免费| 国产亚洲AV电影院之毛片| 国产av综合一区二区三区| 国产毛片三区二区一区| 99久久99久久久精品久久| 男女做aj视频免费的网站| 久久天堂综合亚洲伊人HD妓女| 久久精品女人的天堂av| 亚洲熟妇熟女久久精品综合| 国产精品一二二区视在线| 五月天丁香婷婷亚洲欧洲国产| 四房播色综合久久婷婷| 国产精品久久久久久久专区| 成人免费A级毛片无码片2022| 我要看亚洲黄色太黄一级黄| 久久99热只有频精品8| 色丁香一区二区黑人巨大| 午夜一区二区三区视频| av高清无码 在线播放| 国产在线超清日本一本| 扒开双腿猛进入喷水高潮叫声| 欧美人与zoxxxx另类|