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

泉州网站优化wordpress安装方法

泉州网站优化,wordpress安装方法,wordpress主题之家,百度网站怎么用背景 当我们把应用的配置都放到配置中心后#xff0c;很多人会想到这样一个问题#xff0c;配置里面有敏感的信息要怎么处理呢#xff1f;信息既然敏感的话#xff0c;那么加个密就好了嘛#xff0c;相信大部分人的第一感觉都是这个#xff0c;确实这个是最简单也是最合适… 背景 当我们把应用的配置都放到配置中心后很多人会想到这样一个问题配置里面有敏感的信息要怎么处理呢信息既然敏感的话那么加个密就好了嘛相信大部分人的第一感觉都是这个确实这个是最简单也是最合适的方法。其实很多人都在关注这个问题好比说数据库的连接字符串调用第三方的密钥等等这些信息都是不太想让很多人知道的。那么如果我们把配置放在 Nacos 了我们可以怎么操作呢想了想不外乎这么几种全部服务端搞定客户端只管取全部客户端搞定服务端只管存客户端为主服务端为辅服务端存一些加解密需要的辅助信息即可。有一个老哥已经在 issue 里面提出了相关的落地方案也包含了部分实现。https://github.com/alibaba/nacos/issues/5367简要概述的话就是开个口子用户可以在客户端拓展任意加解密方式同时服务端可以辅助这一操作。不过看了 2.0.2 的代码服务端这一块的“辅助”还未完成不过对客户端来说这一块其实问题已经不大了。6月14号发布的 nacos-sdk-csharp 1.1.0 版本已经支持了这一功能下面就用 .NET 5 和 Nacos 2.0.2 为例来简单说明一下。简单原理说明 sdk 里面在进行配置相关读写操作的时候会有一个 DoFilter 的操作。这个操作就是我们的切入点。既然要执行 Filter 那么执行的 Filter 从那里来呢答案是 IConfigFilter 。sdk 里面提供了 IConfigFilter 这个接口但是不提供实现具体实现交由用户自定义毕竟 100 个人就有 100 种不一样的实现。下面看看它的定义。public interface IConfigFilter {void Init(NacosSdkOptions options);int GetOrder();string GetFilterName();void DoFilter(IConfigRequest request, IConfigResponse response, IConfigFilterChain filterChain); } Init 方法就是对这个 ConfigFilter 进行一些初始化操作好比说从 Options 里面拿一些额外的信息。GetOrder 和 GetFilterName 属于辅助信息指定这个 ConfigFilter 的执行顺序(越小越先执行)和名称。DoFilter 就是核心了它可以变更 request 和 response 这两个对象内部都会维护一个包含配置信息的 Dictionary。换言之只要我们定义一个 ConfigFilter实现了这个接口那么配置想怎么操作都可以了加解密就是小问题了。其中 NacosSdkOptions 里面加了两个配置项是专门给这个功能用的 ConfigFilterAssemblies 和 ConfigFilterExtInfoConfigFilterAssemblies 是自定义 ConfigFilter 所在的程序集的名字这里是一个字符串列表类型的参数sdk 会根据这个名字去找到对应的实现然后初始化好。ConfigFilterExtInfo  是实现 ConfigFilter 是需要用到的扩展信息这里是一个字符串类型的参数扩展信息复杂的可以考虑传入一个 JSON 字符串。下面来看个具体的例子吧。自定义 ConfigFilter 这个 Filter 实现的效果是把部分敏感配置项进行加密敏感的配置项需要在配置文件中指定。先是 Init 方法public void Init(NacosSdkOptions options) {// 从 Options 里面的拓展信息获取需要加密的 json path// 这里只是示例根据具体情况调整成自己合适的var extInfo  JObject.Parse(options.ConfigFilterExtInfo);if (extInfo.ContainsKey(JsonPaths)){// JsonPaths 在这里的含义是那个path下面的内容要加密_jsonPaths  extInfo.GetValue(JsonPaths).ToObjectListstring();} } 然后是 DoFilter 方法这个方法里面要注意几点request 只有请求的时候才会有值其他时候都是 null 值。response 只有响应的时候才会有值其他时候都是 null 值。操作完之后一定要调用 PutParameter 方法进行覆盖才会生效。public void DoFilter(IConfigRequest request, IConfigResponse response, IConfigFilterChain filterChain) {if (request ! null){var encryptedDataKey  DefaultKey;var raw_content  request.GetParameter(Nacos.V2.Config.ConfigConstants.CONTENT);// 部分配置加密后的 contentvar content  ReplaceJsonNode((string)raw_content, encryptedDataKey, true);// 加密配置后不要忘记更新 request !!!!request.PutParameter(Nacos.V2.Config.ConfigConstants.ENCRYPTED_DATA_KEY, encryptedDataKey);request.PutParameter(Nacos.V2.Config.ConfigConstants.CONTENT, content);}if (response ! null){var resp_content  response.GetParameter(Nacos.V2.Config.ConfigConstants.CONTENT);var resp_encryptedDataKey  response.GetParameter(Nacos.V2.Config.ConfigConstants.ENCRYPTED_DATA_KEY);// nacos 2.0.2 服务端目前还没有把 encryptedDataKey 记录并返回所以 resp_encryptedDataKey 目前只会是 null// 如果服务端有记录并且能返回我们可以做到每一个配置都用不一样的 encryptedDataKey 来加解密。// 目前的话只能固定一个 encryptedDataKey var encryptedDataKey  (resp_encryptedDataKey  null || string.IsNullOrWhiteSpace((string)resp_encryptedDataKey)) ? DefaultKey : (string)resp_encryptedDataKey;var content  ReplaceJsonNode((string)resp_content, encryptedDataKey, false);response.PutParameter(Nacos.V2.Config.ConfigConstants.CONTENT, content);} } 这里涉及 encryptedDataKey 的相关操作都只是预留操作现阶段可以不用理会。还有一个 ReplaceJsonNode 方法就是替换敏感配置的具体操作了。private string ReplaceJsonNode(string src, string encryptedDataKey, bool isEnc  true) {// 示例配置用的是JSON如果用的是 yaml这里换成用 yaml 解析即可。var jObj  JObject.Parse(src);foreach (var item in _jsonPaths){var t  jObj.SelectToken(item);if (t ! null){var r  t.ToString();// 加解密var newToken  isEnc? AESEncrypt(r, encryptedDataKey): AESDecrypt(r, encryptedDataKey);if (!string.IsNullOrWhiteSpace(newToken)){// 替换旧值t.Replace(newToken);}}}return jObj.ToString(); } 到这里自定义的 ConfigFilter 已经完成了下面就是真正的应用了。简单应用 老样子建一个 WebApi 项目添加自定义 ConfigFilter 所在的包/项目/程序集。这里用的是集成 ASP.NET Core 的例子。修改 appsettings.json{NacosConfig: {Listeners: [     {Optional: true,DataId: demo,Group: DEFAULT_GROUP}],Namespace: cs,ServerAddresses: [ http://localhost:8848/ ],ConfigFilterAssemblies: [ XXXX.CusLib ],ConfigFilterExtInfo: {\JsonPaths\:[\ConnectionStrings.Default\],\Other\:\xxxxxx\}} } 注老黄这里把 Optional 设置成 true是为了第一次运行的时候如果服务端没有进行配置而不至于退出程序。修改 Program.cspublic class Program {public static void Main(string[] args){var outputTemplate  {Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level}] {Message}{NewLine}{Exception};Log.Logger  new LoggerConfiguration().Enrich.FromLogContext().MinimumLevel.Override(Microsoft, LogEventLevel.Warning).MinimumLevel.Override(System, LogEventLevel.Warning).MinimumLevel.Debug().WriteTo.Console(outputTemplate: outputTemplate).CreateLogger();System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);try{Log.ForContextProgram().Information(Application starting...);CreateHostBuilder(args, Log.Logger).Build().Run();}catch (System.Exception ex){Log.ForContextProgram().Fatal(ex, Application start-up failed!!);}finally{Log.CloseAndFlush();}}public static IHostBuilder CreateHostBuilder(string[] args, Serilog.ILogger logger) Host.CreateDefaultBuilder(args).ConfigureAppConfiguration((context, builder) {var c  builder.Build();                    builder.AddNacosV2Configuration(c.GetSection(NacosConfig), logAction: x  x.AddSerilog(logger));}).ConfigureWebHostDefaults(webBuilder {webBuilder.UseStartupStartup().UseUrls(http://*:8787);}).UseSerilog(); } 最后是 Startup.cspublic class Startup {// 省略部分....public void ConfigureServices(IServiceCollection services){services.AddNacosV2Config(Configuration, null, NacosConfig);services.ConfigureAppSettings(Configuration.GetSection(AppSettings));services.AddControllers();}public void Configure(IApplicationBuilder app, IWebHostEnvironment env){var configSvc  app.ApplicationServices.GetRequiredServiceNacos.V2.INacosConfigService();var db  $demo-{DateTimeOffset.Now.ToString(yyyyMMdd_HHmmss)};var oldConfig  {\ConnectionStrings\:{\Default\:\Server127.0.0.1;Port3306;Database  db  ;User Idapp;Password098765;\},\version\:\测试version---\,\AppSettings\:{\Str\:\val\,\num\:100,\arr\:[1,2,3,4,5],\subobj\:{\a\:\  db  \}}};configSvc.PublishConfig(demo, DEFAULT_GROUP, oldConfig).ConfigureAwait(false).GetAwaiter().GetResult();var options  app.ApplicationServices.GetRequiredServiceIOptionsMonitorAppSettings();Console.WriteLine(用 IOptionsMonitor 读取配置);Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(options.CurrentValue));Console.WriteLine();Console.WriteLine(用 IConfiguration 读取配置);Console.WriteLine(Configuration[ConnectionStrings:Default]);Console.WriteLine();var pwd  $demo-{new Random().Next(100000, 999999)};var newConfig  {\ConnectionStrings\:{\Default\:\Server127.0.0.1;Port3306;Database db  ;User Idapp;Password pwd ;\},\version\:\测试version---\,\AppSettings\:{\Str\:\val\,\num\:100,\arr\:[1,2,3,4,5],\subobj\:{\a\:\ db \}}};// 模拟 配置变更configSvc.PublishConfig(demo, DEFAULT_GROUP, newConfig).ConfigureAwait(false).GetAwaiter().GetResult();System.Threading.Thread.Sleep(500);var options2  app.ApplicationServices.GetRequiredServiceIOptionsMonitorAppSettings();Console.WriteLine(用 IOptionsMonitor 读取配置);Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(options2.CurrentValue));Console.WriteLine();Console.WriteLine(用 IConfiguration 读取配置);Console.WriteLine(Configuration[ConnectionStrings:Default]);Console.WriteLine();// 省略部分....} } 最后来看看几张效果图首先是程序的运行日志。其次是和 Nacos 控制台的对比。到这里的话基于 Nacos 的加解密就完成了。写在最后 敏感配置项的加解密还是很有必要的配置中心负责存储客户端负责加解密这样的方式可以让用户更加灵活的选择自己想要的加解密方法。本文的示例代码已经上传到 Github仅供参考。https://github.com/catcherwong-archive/2021/tree/main/NacosConfigWithEncryption最后的最后希望感兴趣的大佬可以一起参与到这个项目来。nacos-sdk-csharp 的地址 https://github.com/nacos-group/nacos-sdk-csharp
http://www.yutouwan.com/news/420938/

相关文章:

  • 广州交易网站建设深圳建设厅官方网站
  • 辽宁省建设厅网站更新做网页去哪些网站找素材较好
  • 小程序视频网站开发潍坊高新建设局网站
  • 现在网站尺寸三 网站开发使用软件环境
  • 哪些网站做微课赚钱反钓鱼网站建设期
  • 用模块做网站用wordpress做微站
  • 网站建设开发技术类型天津seo关键字推广
  • 好的网站模板免费查公司信息
  • 做一个响应网站多少钱无锡网站推广优化
  • 北京孤儿院做义工网站网站建立连接不安全
  • 精美的微网站免费ai写作网站
  • 如何建设网站济南兴田德润简介电话海外酒店 网站建设
  • 女装网站欣赏青海建设厅网站证件查询
  • 做视频网站需要备案网站多少钱
  • 企业网站建设的意义和效果html怎么做商品页面
  • 网站服务器参数查询网站版面
  • 丹东企业网站建设平台做网络平台的网站
  • 百度网站审核期时间搭建平台的成语
  • 站长号查询入口站长工具建站之星网站 seo优化
  • 设计公司画册零感设计网站seo哪家好
  • 网站维护中页面设计福州短视频seo排行
  • 网站开发样板百度资源共享
  • 台州网站设计飞速定制软件app
  • 用html建设网站买完域名接下来怎么弄
  • 网站分栏目怎么做网站发语音功能如何做
  • 自己做网站卖产品怎么样网站建设开发费怎么做账
  • 进网站显示建设中怎么解决卢沟桥网站建设
  • 如何将自己做网站放上网百度学术官网论文查重免费
  • 个人网站做接口可以么金网科技有限公司
  • 金融网站模板素材宁波建设集团股份有限公司