首页 文章 精选 留言 我的

精选列表

搜索[快速],共10000篇文章
优秀的个人博客,低调大师

YuebonNetCore v1.0.5 已经发布,权限管理及快速开发框架

YuebonNetCore v1.0.5 已经发布。首先恭祝所有关注YuebonCore的朋友新春快乐!牛年大吉! 在此新年之际 , 我们发布了v1.0.5版 , 这次版本发布的最大变化实现数据库读写分离和新增请求签名验证。 新特性 1、【新增】实现数据库读写分离,支持一主多从读写分离 2、【新增】增加浮点数转换器DecimalJsonConverter,在转换json时需用 3、【新增】新增请求签名验证,防止请求参数是否被篡改,提高接口安全性 4、【新增】添加swagger header是否需要签名验证 5、【新增】富文本编辑器tinymce 突破性变化 1、【调整】优化文章管理模块,富文本编辑器集成tinymce,汉化和实现本地化图片上传 2、【调整】调整定时任务模块为独立类库 3、【调整】调整数据类型枚举 4、【调整】删除sqldapper类和接口 5、【调整】调整EF oracle 引用包为devart.data.oracle.efcore 问题修复 1、【优化】优化超级管理员不分配权限可以拥有所有操作权限 2、【优化】上传图片优化 3、【优化】修复mysql数据库情况下根据部门id获取组织根节点错误 4、【优化】修复vue页面代码模板 5、【优化】修复定时任务异常 6、【优化】修复新增、修改数据字典分类判断分类编码是否重复 7、【优化】修复当弹出框高度大于屏幕显示高度时,拖拽时,弹出框的顶端会超出屏幕的上端,造成无法再拖拽 8、【优化】修复代码生成器生成前端vue代码删除数据错误问题 9、【优化】修复获取文章分类树形列表,判断为空的问题 其他更改 1、发布使用视频 2、完善部分方法注释 详情查看:https://gitee.com/yuebon/YuebonNetCore/releases/v1.0.5

优秀的个人博客,低调大师

如何利用go-zero在Go中快速实现JWT认证

关于JWT是什么,大家可以看看官网,一句话介绍下:是可以实现服务器无状态的鉴权认证方案,也是目前最流行的跨域认证解决方案。 要实现JWT认证,我们需要分成如下两个步骤 客户端获取JWT token。 服务器对客户端带来的JWT token认证。 1. 客户端获取JWT Token 我们定义一个协议供客户端调用获取JWT token,我们新建一个目录jwt然后在目录中执行 goctl api -o jwt.api,将生成的jwt.api改成如下: type JwtTokenRequest struct { } type JwtTokenResponse struct { AccessToken string `json:"access_token"` AccessExpire int64 `json:"access_expire"` RefreshAfter int64 `json:"refresh_after"` // 建议客户端刷新token的绝对时间 } type GetUserRequest struct { UserId string `json:"userId"` } type GetUserResponse struct { Name string `json:"name"` } service jwt-api { @handler JwtHandler post /user/token(JwtTokenRequest) returns (JwtTokenResponse) } @server( jwt: JwtAuth ) service jwt-api { @handler JwtHandler post /user/info(GetUserRequest) returns (GetUserResponse) } 在服务jwt目录中执行:goctl api go -api jwt.api -dir . 打开jwtlogic.go文件,修改 func (l *JwtLogic) Jwt(req types.JwtTokenRequest) (*types.JwtTokenResponse, error) { 方法如下: func (l *JwtLogic) Jwt(req types.JwtTokenRequest) (*types.JwtTokenResponse, error) { var accessExpire = l.svcCtx.Config.JwtAuth.AccessExpire now := time.Now().Unix() accessToken, err := l.GenToken(now, l.svcCtx.Config.JwtAuth.AccessSecret, nil, accessExpire) if err != nil { return nil, err } return &types.JwtTokenResponse{ AccessToken: accessToken, AccessExpire: now + accessExpire, RefreshAfter: now + accessExpire/2, }, nil } func (l *JwtLogic) GenToken(iat int64, secretKey string, payloads map[string]interface{}, seconds int64) (string, error) { claims := make(jwt.MapClaims) claims["exp"] = iat + seconds claims["iat"] = iat for k, v := range payloads { claims[k] = v } token := jwt.New(jwt.SigningMethodHS256) token.Claims = claims return token.SignedString([]byte(secretKey)) } 在启动服务之前,我们需要修改etc/jwt-api.yaml文件如下: Name: jwt-api Host: 0.0.0.0 Port: 8888 JwtAuth: AccessSecret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxx AccessExpire: 604800 启动服务器,然后测试下获取到的token。 ➜ curl --location --request POST '127.0.0.1:8888/user/token' {"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDEyNjE0MjksImlhdCI6MTYwMDY1NjYyOX0.6u_hpE_4m5gcI90taJLZtvfekwUmjrbNJ-5saaDGeQc","access_expire":1601261429,"refresh_after":1600959029} 2. 服务器验证JWT token 在api文件中通过jwt: JwtAuth标记的service表示激活了jwt认证。 可以阅读rest/handler/authhandler.go文件了解服务器jwt实现。 修改getuserlogic.go如下: func (l *GetUserLogic) GetUser(req types.GetUserRequest) (*types.GetUserResponse, error) { return &types.GetUserResponse{Name: "kim"}, nil } 我们先不带JWT Authorization header请求头测试下,返回http status code是401,符合预期。 ➜ curl -w "\nhttp: %{http_code} \n" --location --request POST '127.0.0.1:8888/user/info' \ --header 'Content-Type: application/json' \ --data-raw '{ "userId": "a" }' http: 401 加上Authorization header请求头测试。 ➜ curl -w "\nhttp: %{http_code} \n" --location --request POST '127.0.0.1:8888/user/info' \ --header 'Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDEyNjE0MjksImlhdCI6MTYwMDY1NjYyOX0.6u_hpE_4m5gcI90taJLZtvfekwUmjrbNJ-5saaDGeQc' \ --header 'Content-Type: application/json' \ --data-raw '{ "userId": "a" }' {"name":"kim"} http: 200 综上所述:基于go-zero的JWT认证完成,在真实生产环境部署时候,AccessSecret, AccessExpire, RefreshAfter根据业务场景通过配置文件配置,RefreshAfter 是告诉客户端什么时候该刷新JWT token了,一般都需要设置过期时间前几天。 3. 项目地址 https://github.com/tal-tech/go-zero 好未来技术

优秀的个人博客,低调大师

鸿蒙开发快速入门之:Hi3861 开发板(1)

Hi3861开发板介绍 Hi3861 WLAN模组是一片大约2cm*5cm大小的开发板,是一款高度集成的2.4GHz WLAN SoC芯片,集成IEEE 802.11b/g/n基带和RF(Radio Frequency)电路。支持OpenHarmony,并配套提供开放、易用的开发和调试运行环境。 图 1Hi3861 WLAN模组外观图 另外,Hi3861 WLAN模组还可以通过与Hi3861底板连接,扩充自身的外设能力,底板如下图所示。 图 2Hi3861底板外观图 RF电路包括功率放大器PA(Power Amplifier)、低噪声放大器LNA(Low Noise Amplifier)、RF Balun、天线开关以及电源管理等模块;支持20MHz标准带宽和5MHz/10MHz窄带宽,提供最大72.2Mbit/s物理层速率。 Hi3861 WLAN基带支持正交频分复用(OFDM)技术,并向下兼容直接序列扩频(DSSS)和补码键控(CCK)技术,支持IEEE 802.11 b/g/n协议的各种数据速率。 Hi3861芯片集成高性能32bit微处理器、硬件安全引擎以及丰富的外设接口,外设接口包括SPI(Synchronous Peripheral Interface)、UART(Universal Asynchronous Receiver & Transmitter)、I2C(The Inter Integrated Circuit)、PWM(Pulse Width Modulation)、GPIO(General Purpose Input/Output)和多路ADC(Analog to Digital Converter),同时支持高速SDIO2.0(Secure Digital Input/Output)接口,最高时钟可达50MHz;芯片内置SRAM(Static Random Access Memory)和Flash,可独立运行,并支持在Flash上运行程序。 Hi3861芯片适用于智能家电等物联网智能终端领域。 图 3Hi3861功能框图 资源和约束 Hi3861 WLAN模组资源十分有限,整板共2MB FLASH,352KB RAM。在编写业务代码时,需注意资源使用效率。 开发板规格 表 1Hi3861 WLAN模组规格清单 规格类型 规格清单 通用规格 1×1 2.4GHz频段(ch1~ch14) PHY支持IEEE 802.11b/g/n MAC支持IEEE802.11 d/e/h/i/k/v/w 内置PA和LNA,集成TX/RX Switch、Balun等 支持STA和AP形态,作为AP时最大支持6 个STA接入 支持WFA WPA/WPA2 personal、WPS2.0 支持与BT/BLE芯片共存的2/3/4 线PTA方案 电源电压输入范围:2.3V~3.6V IO电源电压支持1.8V和3.3V 支持RF自校准方案 低功耗: Ultra Deep Sleep模式:5μA@3.3V DTIM1:1.5mA@3.3V DTIM3:0.8mA@3.3V PHY特性 支持IEEE802.11b/g/n单天线所有的数据速率 支持最大速率:72.2Mbps@HT20 MCS7 支持标准20MHz带宽和5M/10M窄带宽 支持STBC 支持Short-GI MAC特性 支持A-MPDU,A-MSDU 支持Blk-ACK 支持QoS,满足不同业务服务质量需求 CPU子系统 高性能 32bit微处理器,最大工作频率160MHz 内嵌SRAM 352KB、ROM 288KB 内嵌 2MB Flash 外围接口 1个SDIO接口、2个SPI接口、2个I2C接口、3个UART接口、15个GPIO接口、7路ADC输入、6路PWM、1个I2S接口(注:上述接口通过复用实现) 外部主晶体频率40M或24M 其他信息 封装:QFN-32,5mm×5mm 工作温度:-40℃~+85℃ OpenHarmony关键特性 OpenHarmony基于Hi3861平台提供了多种开放能力,提供的关键组件如下表所示。 表 2OpenHarmony关键组件列表 组件名 能力介绍 WLAN服务 提供WLAN服务能力。包括:station和hotspot模式的连接、断开、状态查询等。 模组外设控制 提供操作外设的能力。包括:I2C、I2S、ADC、UART、SPI、SDIO、GPIO、PWM、FLASH等。 分布式软总线 在OpenHarmony分布式网络中,提供设备被发现、数据传输的能力。 设备安全绑定 提供在设备互联场景中,数据在设备之间的安全流转的能力。 基础加解密 提供密钥管理、加解密等能力。 系统服务管理 系统服务管理基于面向服务的架构,提供了OpenHarmony统一化的系统服务开发框架。 启动引导 提供系统服务的启动入口标识。在系统服务管理启动时,调用boostrap标识的入口函数,并启动系统服务。 系统属性 提供获取与设置系统属性的能力。 基础库 提供公共基础库能力。包括:文件操作、KV存储管理等。 DFX 提供DFX能力。包括:流水日志、时间打点等。 XTS 提供OpenHarmony生态认证测试套件的集合。

优秀的个人博客,低调大师

三分钟快速了解数据库

在现今互联网企业坐拥着爆炸式数据的信息时代,数据库显得尤为重要重要。那什么是数据库呢?今天就简单给大家讲讲什么是数据库,花三分钟时间看完,你就会对它有个基础的了解啦。 一、什么是数据库? 首先在了解数据库之前,我们要先了解一下数据是怎么储存的。 从前到现在,人类经历了结绳记事,甲骨、竹简、纸张记录,录音机、摄像机储存等方法来进行数据储存,这些都属于传统存储方式。 而信息时代的到来,数据存储的方式发生了重大变革,朝着两分方向发展:文件与数据库。 1、文件就是把数据存放在Excel中,形成读写文件后进行存储,然后通过python等工具对文件数据进行筛选、处理、提取; 2、数据库则是把数据按照其结构将储存在计算机中,形成一个具有大数据量的数据集合,像是一个存放文件的文件柜。 利用数据库存储数据是目前最为通用且流行的方式,因为数据库拥有持久化存储、读写速度也很高,并且数据库能极大程度保证数据有效性,不会出现Excel等文件的修改错误的情况。 二、数据库的分类 目前最常用的数据库模式主要有两种,即关系型数据库和非关系型数据库。 1、关系型数据库 关系型数据库模型是把复杂的数据结构归结为简单的二元关系。在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过这些关联的表格分类、合并、连接或选取等运算来实现数据的管理。对于关系型的通俗理解,即数据作为二维数组存在,就像图书馆的图书排列。 书是数据,书架、楼层是关系型的数据结构,而图书馆管理员就是数据库的进程,用于不同的工作。有人救火(数据修复、备份),有人整理书架、书籍(数据整理、归档),而用户进程就是指的来到图书馆的顾客,他们看书、移动书籍。 关系型数据库常见的有MySQL和Oracle,oracle。 2、非关系型数据库 随着web2.0网站的兴起,关系型数据库无法满足海量数据对存储容量的要求,而需要用集群来解决问题,因此非关系型数据库应运而生。 非关系型数据库也被称为NoSQL数据库,它针对特定场景,以高性能和使用便利为目的功能特异化的数据库产品,比如Google的BigTable与Amazon的Dynamo。

优秀的个人博客,低调大师

一篇文章带你快速理解springcloud微服务架构

云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! SpringCloud微服务 微服务的模式和形式我在前面已经进行部分的提及,但是一直没落实到技术层面,这段时间我也在次研究了一下微服务,下面我先贴出SpringCloud整体涉及的结构: 上面展示的这些是SpringCloud整体的结构 先对这些空间做一个初步的介绍: Ribbon,客户端负载均衡,重试机制。 Hystrix,客户端容错保护,服务熔断、请求缓存、请求合并、依赖隔离。 Feign,声明式服务调用,本质上就是Ribbon+Hystrix(优化代码,避免直接使用RestTemplate的混乱)Bus,消息总线,配合Config仓库修改的一种Stream实现,独自启动不需要依赖其它组件。 Eureka,服务注册中心,特性有失效剔除、服务保护。 Dashboard,Hystrix仪表盘,监控集群模式和单点模式,其中集群模式需要收集器Turbine配合。Zuul,API服务网关,功能有路由分发和过滤。还有其它服务空间,包括configuration等等 那么什么是注册中心呢? 注册中心,是服务的提供者发布自己服务的地方,传统手写的restful接口提供的服务会涉及到服务发布者的端口IP等等,通过注册中心可以直接调用已经发布在上面的服务,只需要通过服务名即可 从图中可以看出,服务提供者将自己的服务发布到注册中心,消费者从注册中心取出服务,然后消费,这样生产者只需要关注自身的业务,将自己的服务发布到注册中心就行了,消费者无需关注生产者的内容,只需要从注册中心取出服务就行了,这样将生产者和消费者直接的耦合给断绝了 为什么使用Restful? 首先springcloud对比dubbo,最大的特点之一就是使用Restful的模式进行交互,dubbo是基于RPC进行通信的,而Restful是基于Http协议进行的,从协议的角度上来说Http和RPC都是基于TCP进行研发的协议,Http是最广泛的,不仅支持浏览器还支持各种APP通信,这么来说吧Http就是大家都在用的协议,而RPC是针对某一个平台某一个环节针对性开发的自定义协议,Http由于大众化,所以本身协议会有点笨重,解析起来自然也比RPC要慢,这也是RPC的优势之一,但是Http具有良好的跨平台性质,如下图: SpringCloud服务的横向拓展 使用SpringCloud的另一个目的就是便于服务的横向拓展,大家都知道,当某一个服务由于访问压力变成瓶颈的时候,我们常常希望这个服务能进行负载均衡,分摊压力,以便于更好的向外界提供服务 我们可以在图片中看出,用户服务是具有两个实例的,但是消费者并不知道用户服务是具有两个实例,消费者只知道,当前有用户服务对外提供服务,所以消费者只需要知道服务名就行了,不用在意是哪个服务实例对其提供服务,这样也是进一步封装生产者对外提供服务,同时做了负载均衡,这样加入用户服务突然增加业务量,那么我们只需要再运行多个用户服务的实例即可 SpringCloud熔断机制 在开始熔断机制原理讲解之前,先理解一下什么是服务依赖 从图片上来看,第一行服务A是调用服务B,第二行服务A调用服务B,服务B调用服务C,这样就有一个服务链,A->B->C,假设现在由于网络动荡或者服务器奔溃的原因,服务C挂掉了,然而服务A的访问仍然很大,这样服务A继续请求服务B,而服务B由于无法调用服务C一直在等待,最后导致请求过多,服务B也被压垮了 熔断的原理 当C服务停止的时候,B自动调用写死的数据进行回复,从而避免因为请求过多导致A服务奔溃的情况. 【云栖号在线课堂】每天都有产品技术专家分享!课程地址:https://yqh.aliyun.com/live 立即加入社群,与专家面对面,及时了解课程最新动态!【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK 原文发布时间:2020-07-12本文作者:程序员麦冬本文来自:“掘金”,了解相关信息可以关注“掘金”

优秀的个人博客,低调大师

【抢占式实例】手把手教你快速配置价格监控

场景描述 相信各位小伙伴对阿里云ECS 1折跳楼价的抢占式实例有所耳闻, 有所实践. 但是否经常会因为价格变化不定而忧心忡忡呢? 是否最终月底账单结算时发现某些时刻费用已经超过自己心理阈值而抓狂烦恼呢? 现在我们有一种更简便的方案让您更轻松地监控价格变化, 第一时间得到变化通知. 下边跟我来一步一步配置吧. 配置步骤 第一步: 开通OOS服务 1.1 进入阿里云控制台, 搜索 运维编排 关键字, 进入OOS配置页面. 1.2 选择定时运维, 进入配置页面 您无需为开通OOS服务而额外付款. 第二步: 配置定时运维规则 2.1 配置定时类型 请选择: 周期性重复执行 2.2 配置重复频率 请您依照自己的场景需求配置, 这里支持标准的crontab表达式. 由于竞价实例短时间内价格变化不会特别频繁, 为了防止频繁请求导致限流, 从而引起监控数据缺失, 推荐您以50分钟到1小时为周期进行设置. 样例如下: 2.3 配置重复频率的时区 如无特殊需求, 以默认值为准. 2.4 配置规则结束时间 请您依照自己的场景需求配置价格监控的结束时间. 2.5 预览即将执行时间 第三步: 选择模板 搜索关键词"discount"搜索公共模板, 选择正确模板. 模板名称"ACS-ECS-AlarmWhenDiscountAndPriceExceedsThresholdInMultiZoneAndInstanceType" 第四步: 设置模板参数 4.1 选择监控目标地域 请选择您需要监控的公有云地域. 这里只支持单个地域的监控. 如果需要多个地域监控, 请为每个地域都配置一个定时运维. 4.2 选择监控目标可用区 由于竞价实例每个可用区的价格都是单独计算, 这里请选择您需要监控的可用区, 此处支持多选可用区. 4.3 选择监控实例规格 由于竞价实例各个可用区下各种规格的价格都是单独计算, 这里请选择您需要监控的规格列表, 此处支持多选.上一步中可用区的配置列表与这一步中实例规格的配置列表, 会做笛卡尔积. 例如可用区列表为cn-hangzhou-c, cn-hangzhou-d; 规格列表为ecs.c5.large, ecs.c6.large; 则监控的内容为: , , , 这四种组合. 4.4 选择监控任务类型 这里支持两种类型的监控: 基于实时折扣的监控(Discount): 例如cn-hangzhou-h可用区的ecs.c6.large规格, 原价是0.39元每小时, 竞价实例价格是0.071元每小时. 0.071/0.39=0.18, 即竞价实例折扣是1.8折左右. 如果您对折扣比较敏感, 希望在该规格折扣大于某个阈值时(例如2折)收到报警, 可以选择此种监控方式. 基于实时价格的监控(Price): 例如cn-hangzhou-h可用区的ecs.c6.large规格, 原价是0.39元每小时, 竞价实例价格是0.071元每小时. 如果您对实际价格比较敏感, 希望在该规格价格大于某个阈值时(例如0.1元每小时)收到报警, 可以选择此种监控方式. 4.5 配置价格或折扣阈值 如果您是基于实时折扣的监控, 这里配置的阈值即为"折扣阈值", 整数类型数字, 换算规则如下. 0.5折即为原价的5%, 这里填写 5 1.1折即为原价的11%, 这里填写 11 3.2折即为原价32%, 这里填写 32 依次类推 如果您是基于实时价格的监控, 这里配置的阈值即为"价格阈值", 直接配置规格小时价格即可. 例如 0.1 4.6 配置接受报警消息通知的webhook地址 您需要配置webhook地址以便接收报警信息, 这里以钉钉机器人为例: 4.6.1 添加机器人路径如下: 群设置->智能群助手->添加机器人->自定义->添加 4.6.2 配置自定义关键词: "监控" 4.6.3 获取机器人webhook地址: 4.6.4 配置webhook: 4.7 配置授权角色 4.7.1 进入RAM控制台: 4.7.2 选择授权类型 4.7.3 配置角色 角色名称为了方便管理, 请设置为: OOSServiceRole 4.7.4 为角色授权 4.7.5 配置权限 请选择: AliyunECSReadOnlyAccess 权限 4.7.6 完成配置 回到OOS配置页面, 刷新授权角色列表, 选择"OOSServiceRole", 完成配置. 更细粒度授权控制配置, 请参见: https://help.aliyun.com/document_detail/120810.html 第五步: 执行管理与报警验收 确认执行计划 验收报警信息 为了方便调试, 建议您在"4.5 配置价格或折扣阈值"步骤中, 可以设置一个较低的阈值, 验证接收消息无误, 再修改阈值重新创建执行. 报警消息推送样例如下: 欢迎各位小伙伴使用, 如果有什么疑问就在下边评论吧.

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册