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

spring security OAuth2 客户端接入gitee

一、简介

     OAuth 是一个开放标准,该标准允许用户让第三方应用访问该用户在某一网站上存储的私密资源(如头像、照片、视频等),并且在这个过程中无须将用户名和密码提供给第三方应用。通过令牌(token)可以实现这一功能,每一个令牌授权一个特定的网站在特定的时段内允许可特定的资源。0Auth让用户可以授权第三方网站灵活访问它们存储在另外一些资源服务器上的特定信息,而非所有内容。对于用户而言,我们在互联网应用中最常见的 OAuth应用就是各种第三方登录,例如QQ授权登录、微信授权登录、微博授权登录、GitHub 授权登录等。

例如用户想登录 Ruby China,传统方式是使用用户名密码但是这样并不安全,因为网站会存储你的用户名密码,这样可能会导致密码泄露。这种授权方式安全隐患很大,如果使用 0Auth 协议就能很好地解决这一问题。

   注意:OAuth2 是0Auth 协议的下一版本,但不兼容 Auth 1.0。 OAuth2 关注客户端开发者的简易性,同时为 web 应用、桌面应用、移动设备IoT 设备提供专门的认证流程。


二、OAuth2 四种授权模式

    0Auth2 协议一共支持四种不同的授权模式, 无论哪种授权模式,其授权流程都是相似的,只不过在个别步骤上有一些差异而已;

  1. 授权码模式:常见的第三方平台登录功能基本都是使用这种模式;
  2. 简化横式:简化模式是不需要第三方服务端参与,直接在浏览器中向授权服务器申请令牌 (token),如果网站是纯静态页面,则可以采用这种方式。
  3. 密码模式:密码模式是用户把用户名/密码直接告诉客户端,客户端使用这些信息后授权服务器申请令牌(token)。这需要用户对客户端高度信任,例如3客户端应用和服务提供商就是同一家公司。
  4. 客户端模式:客户端模式是指客户端使用自己的名义而不是用户的名义向服务提估者申请授权。严格来说,客户诺模式并不能算作0Auth协议解决问题的种解决方案,但是对于开发者而言,在一些为移动端提供的授权服务器上使用这种模式还是非常方便的。

-(A) 用户打开客户端以后,客户端要求用户给予授权。

-(B) 用户同意给予客户端授权。

-(C) 客户端使用上一步获得的授权,向认证服务器申请令牌。

-(D) 认证服务器对客户端进行认证以后,确认无误,同意发放令牌。

-(E) 客户端使用令牌,向资源服务器申请获取资源。

-(F)  资源服务器确认令牌无误,同意向客户端开放资源。

从上图中我们可以看出六个步骤之中,B是关键,即用户怎样才能给于客户端授权。同时会发现 OAuth2 中包含四种不同的角色:

。 client : 第三方应用。

。 Resource 0wner: 资源所有者。

。 Authorization Server: 授权服务器。

。 Resource Server:  资源服务器。


2.1 授权码模式

    授权码模式(Authorization code) 是功能最完整、流程最严密、最安全并且使用最广泛的一种0Auth2 授权模式。同时也是最复杂的一种授权模式,它的特点就是通过客户端的后台服务器,与服务提供商的认证服务器进行互动;

Third-party application:第三方应用程序,简称"客户端”(client);

。Resource 0wner:资源所有者,简称"用户” (user) ;

。User Aqent:用户代理,是指浏览器;

。Authorization Server:认证服务器,即服务端专门用来处理认证的服务器;

。Resource Server;资源服务器,即服务端存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器

流程图连接:RFC 6749 - The OAuth 2.0 Authorization Framework

具体流程如下:

(A) 用户访问第三方应用,第三方应用通过浏览器导向认证服务器。

(B) 用户选择是否给予客户端授权。

(C) 假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI”(redirection URI),同时附上一个授权码。

(D) 客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。

(E) 认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌 (access token)和更新牌(refresh token)

2.1.1 核心参数

https://wx.com/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=http://www.baidu.com&scope=read

2.1.2 参数详解

client_id授权服务器注册应用后的唯一标识
response_type必须 固定值 在授权码中必须为 code
redirect_uri必须 通过客户端注册的重定向URL
scope必须 令牌可以访问资源权限 read 只读   all 读写
state可选 存在原样返回客户端 用来防止 CSRF跨站攻击


2.2  简化模式

    简化模式(simple grant type) 不通过第三方应用程序的服务器,直接在测览器中向认证服务器申请令牌,跳过了"授权码"这个步,因此得名。所有步骤在浏览器中完成,令牌对访问者是可见的,且客户端不需要认证。

其具体的授权流程如图所示:

(A)   第三方应用将用户导向认证服务器

  (B)    用户决定是否给于客户端授权。.

  (C)   假设用户给予授权,认证服务器将用户导向客户端指定的"重定向URI",并在URI的Hash部分包含了访问令牌。#token.

  (D)   浏览器向资源服务器发出请求,其中不包括上一步收到的Hash值。.

  (E)   资源服务器返回一个网页,其中包含的代码可以获取Hash值中的令牌。

  (F)   浏览器执行上一步获得的脚本,提取出令牌。

  (G)   浏览器将令牌发给客户端。

2.2.1  核心参数

https://wx.com/oauth/authorize?response_type=token&client_id=CLIENT_ID&redirect_uri=http://wmw.baidu.com&scope=read

2.2.2  参数详解

参数详解
                字段                    描述
client_id授权服务器注册应用后的唯一标识
response_type必须 固定值 在授权码中必须为token
redirect_uri必须 通过客户端注册的重定向URL
scope必须 令牌可以访问资源权限 read 只读   all 读写
state可选 存在原样返回客户端 用来防止 CSRF跨站攻击


2.3 密码模式

密码模式(Resource 0wner Password Credentias grant)中,用户向客户端提供自己的用户各和密码。客户端使用这些信息,向“服务商提供两"索要授权。在这种模式中,用户必须把自己的密码给客户端,但是客户端不得储存密码。这通常用在用户对客户端高度信任的情下,比如客户端是操作系统的一部分,或者由一个相同公司出品。而认证服务图只有在其他授权模式无法执行的情况下,才能考虑使用这种模式。

其具体的授权流程如图所示

具体步骤如下:

(A) 用户向客户端提供用户名和密码。

(B) 客户端将用户名和密码发给认证服务器,向后者请求令牌。

(C) 认证服务器确认无误后,向客户端提供访间令牌。

2.3.1 核心参数

https://wx.com/token?grant_type=password&username-USERNAME&password=PASSWORD&client_id=CLIENT_ID


2.4 客户端模式

客户端模式(Client Credentials Grant) 指客户端以自己的名义,而不是以用户的名义,向"服务提供商"进行认证。严格地说,客户端模式并不属于0Auth框架所要解决的问题。在这种模式中,用户直接向客户端注册,客户端以自己的名义要求”服务提供商“提供服务,其实不存在授权问题。

授权流程图如下

具体步骤如下:

(A) 客户端向认证服务器进行身份认证,并要求一个访问令牌。

(B) 认证服务器确认无误后,向客户端提供访问令牌。

2.4.1 核心参数

     https://wx.com/token?grant_type=client_credentials&client_secret=CLIENT_SECRET&client_id=CLIENT_ID


三、OAuth2 标准接口

。 /oauth/authorize:  授权端点
。 /oauth/token: 获取令牌端点
。/oauth/confirm_access: 用户确认授权提交端点
。/oauth/error: 授权服务错误信息端点
。/oauth/check_token:  用于资源服务访问的令牌解析端点
。/oauth/token_key: 提供公有密匙的端点,如果使用JWT令牌的话


四、案例实践

使用 gitee 授权登录,登录成功后访问 hello接口,获取授权后的信息

4.1 OAuth2结合Gitee授权案例

打开引用设置:https://gitee.com/oauth/applications

1、进入第三方应用

2、创建应用,填写回调的地址以及主页地址

4.2 后端配置

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().anyRequest().authenticated().and().oauth2Login();// 使用oauth2 认证,配置从配置文件中读取}
}

导入依赖

--所需的依赖<!-- oauth2 客户端 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-client</artifactId></dependency>

 

配置 yml 文件将gitee 加入provider 中

   如果不加的话,启动会报 provider Id not found 相当于要明确指出来

spring:security:oauth2:client:registration:gitee:provider: giteeclient-id: 83f45xxxf29198ff68ada42f8client-secret: 61e7fe7502a0fd162exx429542f739c9ba6322
# 重定向的url地址,这个地址为默认的redirect-uri: http://localhost:8082/login/oauth2/code/giteeauthorization-grant-type: "authorization_code"client-name: gitee#不配置这个会报 gitee找不到provider:gitee:authorization-uri: https://gitee.com/oauth/authorizetoken-uri: https://gitee.com/oauth/tokenuser-info-uri: https://gitee.com/api/v5/useruser-name-attribute: "name"

4.3 测试controller

  用于授权成功后,获取oauth2的用户信息

@RestController
public class HelloController {/***  获取认证后的用户信息* @return*/@RequestMapping("hello")public DefaultOAuth2User hello() {System.out.println("oauth2用户信息获取");Authentication authentication = SecurityContextHolder.getContext().getAuthentication();return (DefaultOAuth2User)authentication.getPrincipal();}}

4.4 授权效果

   当我们启动项目后,访问 8082接口,自动给我们定向到 gitee授权页面,我们同意后,就会跳到我们配置的主页面了;

4.5 同时开启表单登录

当我们启动项目后,会自动进入到授权页面了,但是有时候我们需要在登录页面加上 gitee的入口,当用户点击后,我们才开始进行授权的操作,这个该怎么做呢,其实我们开启我们的表单认证就好了;

http.authorizeRequests().anyRequest().authenticated().and().formLogin()//开启表单登录.and().oauth2Login();// 使用oauth2 认证,配置从配置文件中读取

五、授权过滤器源码查看

   我们肯定在疑问,我们项目里面并没有/login/oauth2/code 这个接口,为什么能访问呢,我们自己加上了 gitee如何就能收到对应的授权呢;

接下来我们来看   OAuth2LoginAuthenticationFilter 源码

5.1 源码入口

org.springframework.security.config.annotation.web.builders.HttpSecurity#oauth2Login()

      org.springframework.security.config.annotation.web.configurers.oauth2.client.OAuth2LoginConfigurer

    org.springframework.security.oauth2.client.web.OAuth2LoginAuthenticationFilter

   DEFAULT_FILTER_PROCESSES_URI = "/login/oauth2/code/*";

5.2  attemptAuthentication() 方法

 attemptAuthentication(HttpServletRequest request, HttpServletResponse response)

org.springframework.security.authentication.AuthenticationManager#authenticate 这一步就是请求 gitee的认证服务器

5.3 OAuth2AuthenticationToken

   当我们通过Oauth2认证成功后,系统会返回一个OAuth2AuthenticationToken对象,同事会将用户信息包装一个 OAuth2User ,对应的实现为DefaultOAuth2User


六、spring security OAuth2 杂谈

该文献参考  哔站  编程不良人 ,有需求可以关注他

     Spring Security 对 0Ath2 提供了很好的支持,这使得我们在 Spring Security中使用 0Auth2 非常地方便。然而由于历史原因,SoringSeaurity对0Auth2的支持比较混乱,这里简单梳理一下。

大约十年前,Spring 引入了一个社区驱动的开源项目 Spring Security 0Auth,并将其纳入 Spring 项目组合中到今天为止,这个项目己经发展成为一个成熟的项目,可以支持大部分0Auth 规范,包括资源服务器、 客户端和授权服务器等。

然而早期的项目存在一些问题,例如:

0Auth 是在早期完成的,开发者无法预料未来的变化以及这些代码到底要被怎么使用.这导致很多 Spring 项目提供了自己的 0Auth 支持,也就带来了 0Auth 支持的碎片化。最早的0Auth项目同时支特 0Auth1. 和 0Auth2.0,而现在0Autb1 早已经不再使用可以放弃了。

现在我们有更多的库可以选择,可以在这些库的基础上去开发,以便更好地支持JWT等新技术。基于以上这些原因,官方决定重写 Spring ecurity 0Auth, 以便更好地协调 Spring 和Auth,并简化代码库,使Spring 的 0Auth 支持更加灵活。然而,在重写的过程中,发生了不少波折。

2018年1月30日,Sprng 官方发了一个通知,表示要逐渐停止现有的 0Ath2支持,然后在 Spring Security 5中构建下一代 Auth2.0 支持。这么做的原因是因为当时 0Auth2 的落地方案比较混乱,在 Spring Security 0Auth、Spring cloud Security、Spring Boot 1.5.x 以及当时最新的Spring Security 5.x 中都提供了对 Auth2 的实现。以至于当开发者需要使用 0Auth2 时,不得不问,到底选哪一个依赖合适呢?所以Spring 官方决定有必要将 Auth2.0 的支持统一到一个项目中,以便为用户提供明确的选择,并避免何潜在的混乱,同时 OAuth20的开发文档也要重新编写,以方便开发人员学习。所有的决定将在 pring Security 5 中开始,构建下一代 Ath2的支持。从那个时候起,Spring Security0Auth项目就正式处于维护模式。官方将提供至少一年的错识/安全修复程序,并且会考虑添加次要功能,但不会添加主要功能。同时将 Spring Security 0Auth中的所有功能重构到 Spring Security 5x中

到了2019年11月14日,Spring 官方又发布-个通知,这次的通知首先表示 Spring Security 0Auth 在往 Spring Security 5.x 的过程非常顺利,大都分迁程工作已经完成了,剩下的将在5.3 版本中完成迁移,在迁移的过程中还添加了许多新功能。包括对 openId  Connect1.0 的支持。同时还宣布将不再支持授权服务器,不支持的原因有两个:

1、在2019年,已经有大量的商业和开源投权服务器可用,

2、授权服务器是使用一个库来构建产品,而 Spring Security 作为框架,并不适合做这件事情

一石激起千层浪,许多开发者表示对此难以接受。这件事也在Spring 社区引发了激烈的讨论,好在 Spring 官方愿意倾听来自社区的声音。

到了2020年4月15日,Spring 官方宣布启动 Spring Authorization server 项目。这是-个由 Spring ecurity 团队领导的社区驱动的项目致力于向 Spring 社区提供 Authorization Server支持,也就是说,Spring 又重新支持授权服务器了。2020年8月21日,Spring Authorization Server 0.0.1正式发布!

这就是 Auth2在Spring 家族中的发展历程了。在后面章节中,客户端和资源服务器都将采用最新的方式来构建,授权服务器依然采用旧的方式来构建因为目前的 Spring Authorization Server 0.0.1功能较少且 BUG 较多。

相关文章:

spring security OAuth2 客户端接入gitee

一、简介 OAuth 是一个开放标准&#xff0c;该标准允许用户让第三方应用访问该用户在某一网站上存储的私密资源(如头像、照片、视频等)&#xff0c;并且在这个过程中无须将用户名和密码提供给第三方应用。通过令牌(token)可以实现这一功能&#xff0c;每一个令牌授权一个特定的…...

阿里云镜像报错 [Errno 14] HTTP Error 302 - Found 问题解决记录

1、问题背景和解决思路 在本地安装 CentOS7 后&#xff0c;网络已调通可正常上网&#xff0c;但切换阿里云镜像后&#xff0c;使用 yum 安装软件时出现 “[Errno 14] HTTPS Error 302 - Found Trying other mirror.” 报错&#xff0c;原因是 yum 源配置问题。给出了详细的解决…...

《Linux运维总结:基于X86_64+ARM64架构CPU使用docker-compose一键离线部署consul 1.18.1容器版分布式ACL集群》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面向不通的客户安装我们的业务系统&…...

深入剖析嵌套调用和链式访问,以及函数的声明和定义(超全面覆盖)

1. 前情提要 在上一篇博客中&#xff0c;我们大致了解了函数的种类&#xff0c;以及自定义函数中形参和实参的具体区别 我们知道实参是需要传递给形参的&#xff0c;但其实形参和实参占据的是完全独立的内存空间 x&#xff0c;y在执行过程中会得到a和b的值&#xff0c;但是x…...

浏览器百科:网页存储篇-IndexedDB介绍(十)

1.引言 在现代网页开发中&#xff0c;数据存储需求日益增多和复杂&#xff0c;传统的客户端存储技术如localStorage和sessionStorage已难以满足大型数据的存储和管理需求。为了解决这一问题&#xff0c;HTML5 引入了 IndexedDB&#xff0c;在本篇《浏览器百科&#xff1a;网页…...

Java语言程序设计基础篇_编程练习题*18.22 (将十进制數转换为十六进制数)

题目&#xff1a;*18.22 (将十进制數转换为十六进制数) 编写一个递归方法&#xff0c;将一个十进制数转换为一个十六进制数的字符串。方法头如下: public static String dec2Hex(int value)编写一个测试程序&#xff0c;提示用户输入一个十进制数&#xff0c;然后显示等价的十…...

蓝桥杯3. 压缩字符串

题目描述 实现一个算法来压缩一个字符串。压缩的要求如下&#xff1a; 需要判断压缩能不能节省空间&#xff0c;仅在压缩后字符串比原字符串长度更短时进行压缩。 压缩的格式是将连续相同字符替换为字符 数字形式&#xff0c;例如 "AAABCCDDDD" 变为 "A3BC2D…...

Java设计模式之责任链模式详细讲解和案例示范

在本文中&#xff0c;我们将详细讲解Java设计模式中的责任链模式&#xff0c;探讨其基本概念、使用场景、常见问题和解决方式。同时&#xff0c;我们还会介绍责任链模式与策略模式的区别&#xff0c;并结合电商交易系统的示例进行说明。此外&#xff0c;我们还会探讨责任链模式…...

ubuntu_如何解决apt install时报错:Waiting for cache lock: Could not get lock

当你在 Ubuntu 上运行 apt 时&#xff0c;遇到类似 Waiting for cache lock: Could not get lock 错误&#xff0c;通常是因为另一个进程正在使用 apt 或者类似的包管理器工具。你可以按照以下步骤来查找并解决这个问题&#xff1a; 1. 查询哪个进程正在使用锁 系统中的锁文件…...

软件测试(D5)

步骤&#xff1a; 设计测试-->发现缺陷-->测试报告 Day1 target 1.复述软件测试的定义 2.7种软件测试分类的区别 3.质量模型的重点5项 4.测试流程的6个步骤 5.测试模板的8个要素 认识软件及测试 软件&#xff1a; 控制硬件的工具 应用软件系统软件&#xff0…...

CSS 圆角渐变边框

<div class"contact-box"><div class"contact-item">联系我们</div> </div>.contact-item{width: 194px;height: 48px;border-radius: 20px 20px 20px 20px;background-color: #000000;color: #BDBDBD;font-weight: 500;font-size…...

骑砍2霸主MOD开发(26)-使用TrfExporterBlender制作TRF文件

一.Blender导入TRF文件 import bpytrf_meshes = []trf_contents = []trf_import_path = D:\pt_ladder.trftrf_export_path = D:\pt_ladder_morph_keys.trfclass TrfMesh:def __init__(self):self.mesh_name = self.mesh_materials = []self.vertex_cnt = 0self.vertex_fvf_cnt…...

Leetcode 最大子数组和

使用“Kadane’s Algorithm”来解决。 Kadane’s Algorithm 在每个步骤中都保持着一个局部最优解&#xff0c;即以当前元素为结尾的最大子数组和(也就是局部最优解)&#xff0c;并通过比较这些局部最优解和当前的全局最优解来找到最终的全局最优解。 Kadane’s Algorithm的核…...

目标检测-YOLOv2

YOLOv2介绍 YOLOv2&#xff08;You Only Look Once version 2&#xff09;是一种用于目标检测的深度学习模型&#xff0c;由Joseph Redmon等人于2016年提出&#xff0c;并详细论述在其论文《YOLO9000: Better, Faster, Stronger》中。YOLOv2在保持高速检测的同时&#xff0c;显…...

大数据 - OLAP与OLTP的区别

前言 联机事务处理OLTP&#xff08;on-line transaction processing&#xff09;和 联机分析处理OLAP&#xff08;On-Line Analytical Processing&#xff09;。 OLTP&#xff0c;主要是面向传统的“增删改查”事务系统&#xff0c;数据大都是以实体对象模型来存储数据&#…...

win10+eclipse+ESP8266_RTOS_SDK开发环境构建

官网教程 https://docs.espressif.com/projects/esp8266-rtos-sdk/en/latest/get-started/eclipse-setup.html 1. 导入工程 Build and Flash with Eclipse IDE — ESP8266 RTOS SDK Programming Guide documentation (espressif.com) 导入整个SDK&#xff0c;便于查看所有代…...

树形弹窗选择框/vue2/Element/弹框选择

前言 此类选择器根据vueelementUI实现&#xff0c;使用vue3的可以根据此案例稍作改动即可实现&#xff0c;主要功能有弹出选择、搜索过滤、搜索结果高亮等&#xff0c;此选择器只支持单选&#xff0c;如需多选可在此基础进行改造。 效果图 代码实现 使用时&#xff0c;props-…...

Python精选200Tips:121-125

Spend your time on self-improvement 121 Requests - 简化的 HTTP 请求处理发送 GET 请求发送 POST 请求发送 PUT 请求发送 DELETE 请求会话管理处理超时文件上传122 Beautiful Soup - 网页解析和抓取解析 HTML 和 XML 文档查找单个标签查找多个标签使用 CSS 选择器查找标签提…...

对接后端download接口报未知异常错误

你一定遇到过这种情况&#xff0c;在一个项目中下载功能明明好好的&#xff0c;下载接口调用方法与前端调用方法封装的好好的&#xff0c;可是换了一个接口&#xff0c;竟然搞罢工了&#xff0c;类似下面这样的&#xff0c;你会不会无从下手&#xff0c;不知道该怎么办呢&#…...

vue3 指定元素全屏 screenfull(可直接粘贴使用)

业务需求 由于输入的文字较多&#xff0c;需要将输入框进行全屏展示&#xff0c;方便输入和查看&#xff01; 效果图 实现方式 下载插件"screenfull": “^6.0.2” yarn add screenfull -S项目中使用 import screenfull from "screenfull"templte中代码…...

【规范】Git Commit 约定式提交规范

文章目录 前言介绍使用约定式提交规范的好处提交信息格式信息头部&#xff08;Header&#xff09;正文&#xff08;Body&#xff09;脚注&#xff08;Footer&#xff09;撤销&#xff08;Revert&#xff09; 提交类型表格官网 前言介绍 约定式提交规范它是一种基于提交信息的轻…...

GDB的基本使用方法(之一)

1.编译程序 如果要让GDB调试程序,则编译生成程序时,要添加-g编译选项: $gcc -Wall -O2 -g 源文件 编译器含有针对源代码中的各种各样的错误输出信息的功能,称为警告选项。这些信息并不一定是错误,但却指出了容易引发bug的编码方式。-Werror选项可以在警告发生时,将其当…...

DoubletFinder去除双细胞分析学习

在单细胞RNA测序过程中&#xff0c;有时两个或多个细胞可能在制备过程中意外结合成一个单一的"假细胞"&#xff0c;称为双峰细胞或双倍体。这些双峰细胞可能会扭曲数据分析和解释&#xff0c;因此&#xff0c;需要使用一些方法对它们进行识别和剔除。其中DoubletFind…...

软考高级第四版备考---第四十八天(项目基本要素-项目项目、项目集、项目组合和运营管理之间的关系)

一、概述&#xff1a; 项目集是一组相互关联且被协调管理的项目、子项目集和项目集活动&#xff0c;目的是为了获得分别管理无法获得的利益。项目集不是大项目&#xff0c;大项目是指规模、影响等特别大的项目&#xff1b; 项目组合是指为实现战略目标而组合在一起管理的项目、…...

系统架构设计师:信息系统基础知识

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师:信息系统基础知识前言信息系统构成:信息系统功能:信息系统生命周期…...

微服务-nacos

nacos-注册中心 启动 服务注册到nacos...

快速上手 | 数据可观测性平台 Datavines 自定义SQL规则使用指南

摘要 本文主要介绍在 Datavines平台已有规则不能满足需求的情况下&#xff0c;如何通过自定义SQL规则来实现基于业务特性的数据质量检查。 规则介绍 自定义聚合SQL规则是 Datavines 平台中内置的一个灵活的规则&#xff0c;该规则允许用户通过编写SQL的方式来实现想要的数据质…...

MySQL零基础入门教程-6 查询去重、内外连接查询、子查询、分页查询DQL,基础+实战

教程来源&#xff1a;B站视频BV1Vy4y1z7EX 001-数据库概述_哔哩哔哩_bilibili 我听课收集整理的课程的完整笔记&#xff0c;供大家学习交流下载&#xff1a;夸克网盘分享 本文内容为完整笔记的第六篇 分组查询&DQL总结P41-P66 1、把查询结果去除重复记录 注意&#xf…...

Elastic:如何将数据转化为可操作的见解?

作者&#xff1a;来自 Elastic Elastic Platform Team 一切&#xff0c;从某种程度上说&#xff0c;每个人&#xff0c;都是数据。在我们这个数据驱动的世界里&#xff0c;我们的兴趣和互动被统计和分类&#xff0c;为组织提供如何创造更好的产品和更好的体验的见解。更不用说&…...

基于SSM和VUE的药品管理系统(含源码+sql+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM和VUE的药品管理系统2拥有两种角色 管理员&#xff1a;药品管理、出库管理、入库管理、销售员管理、报损管理等 销售员&#xff1a;登录注册、入库、出库、销售、报损等 1.1 背景…...