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

Java集成Sa-Token进行认证与授权

引言

        软件开发过程中都必须要有的一个功能,那就是认证与授权,经过大佬们的不断更新迭代,使得如今实现认证与授权功能变得相对简单,也许你并不能真正的接触到认证与授权这一功能,除非你接触的项目是从0到1的,即便是这样的项目,认证与授权这一块依旧是系统架构师负责的,正因如此,我们更应该去学习认证与授权,扩展自己的知识面,这样才能在未来成为别人眼中的大佬,那么什么是认证与授权呢,简单讲就是在进入系统前需要进行账号登录,登录时系统根据用户输入的账号密码进行验证,验证通过后返回该用户所拥有的操作权限,本文会从Java认证与授权的发展历程和现在使用最多的标准和框架来讲述

发展历程

        Java程序中的认证与授权机制经历了从简单到复杂、从单一到多样化的历史进程

早期

        校验用户名和密码,但随着网络攻击手段的不断迭代,这种方式就暴露除了缺陷

JavaSE时期

           JavaSE平台提供了更加灵活和安全的认证与授权解决方案,Java Authentication and AuthorizationService(标准认证与授权API),允许开发者在运行时动态配置应用程序的安全策略,支持多种认证方式,

JAVAEE时期

        Java应用开始支持更加复杂的认证与授权机制

Spring Security时期

        随着Spring框架的流行,其生态中的Spring Security逐渐成为Java应用中最受欢迎的认证与授权框架之一,它提供了全面的认证与授权功能,支持多种认证与机制,还提供了基于角色的访问控制(RBAC)、基于属性的访问控制(ABAC)以及基于策略的访问控制(PBAC)等,使得开发者能够更加方便地实现复杂地访问控制逻辑

OAuth2与OpenConnect

        随着第三方应用和服务的兴起,OAuth2和OpenID Connect逐渐成为Java应用中处理第三方认证与授权的重要标准。OAuth2运行第三方应用获取用户在HTTP服务上的部分信息,而无需获取用户的密码和访问所有数据。OpenID Connect则是一种基于OAuth2的身份验证协议,它允许用户通过第三方身份提供者进行身份验证,并且获取有关用户的身份信息。Java中,Spring Security OAuth项目为开发者提供了实现OAuth2和OpenID Connect认证与授权的必要API和工具,这使得Java应用能够更加方便地集成第三方认证服务,实现用户在不同应用程序间地无缝登录和权限管理

现在

        经过长时间地发展,现在Java应用中的认证与授权机制已经变得更加复杂和多样化。除了传统的校验用户名/密码和基于角色的访问控制等外,还涌现出了许多新的认证方式和授权策略,如基于令牌的身份验证(JWT),多因素认证(MFA)等,这些都使得Java应用的安全保护能力更加灵活和强大。并且随着云计算、微服务和容器技术的普及,Java应用中的认证与授权机制也开始向分布式、可扩展和自动化的方向发展,如,Spring Cloud Security,使得开发者可以更加方便地实现微服务之间地认证与授权集成,以及基于策略的自动化访问控制

        随着技术的不断进步和应用场景的不断拓展,Java应用中的认证与授权机制将继续向更加安全、灵活和智能化的方向发展

使用最多的标准和框架

标准

        OAuth 2.0

                开放标准,允许用户提供一个令牌,而不是用户名和密码,给第三方应用以访问它们其他服务上存储的私密资源,被广泛用于API授权,使得第三方应用能够安全的访问用户资源,通常结合Spring Security OAuth2等扩展库使用,实现授权服务器的搭建和客户端的授权请求

        OpenID Connect

                OAuth 2.0的扩展层,它允许用户通过单一的身份标识进行身份验证,并获取关于该用户的信息,在OAuth 2.0的认证流程基础上新增了用户信息的获取功能,广泛应用在Java应用中,特别时单点登录功能

        JWT

                一种用于双方安全传输信息的简洁的、URL安全的令牌标准,基于JSON对象,通过数字签名的方式进行验证和确保信息的安全性,通常与Spring Security等安全框架结合使用,用于生成、解析和校验令牌,广泛应用在分布式系统实现单点登录等功能

框架

        Spring Security

                Spring生态中的一个安全框架,提供了全面的安全性解决方案,支持认证、授权、加密、会话管理等安全功能,并且与Spring生态系统中的其他组件无缝集成,其中认证方式有多种:表单登录、HTTP Basic认证、OAuth2等,并且支持基于角色的访问控制和基于属性的访问控制

        Apache Shiro

                一个轻量级的Java安全框架,提供了身份验证、授权、加密和会话管理功能,还提供了丰富的配置选项和文档支持,适用于小型项目或对性能要求较高的场景

Sa-Token

简介

        最近几年出现的轻量级Java权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth 2.0、分布式Session会话、微服务网关鉴权等一系列权限相关问题,它的成功得益于简单且直观的API设计、模块化设计易于集成、对性能进行优化同时提供高效的加密算法来提高安全性、提供了丰富的扩展接口等,被广泛应用于Web应用中,因为小编最近有使用,感觉不错,推荐给大家

集成与使用

        以微服务为例讲解两种不同环境的集成,网关采用Spring WebFlux环境,其他服务采用SpringBoot环境

Spring WebFlux环境

Maven依赖
<!-- Sa-Token 权限认证(Reactor响应式集成) -->
<dependency><groupId>cn.dev33</groupId><artifactId>sa-token-reactor-spring-boot-starter</artifactId><version>1.39.0</version>
</dependency>
配置全局过滤器
/*** [Sa-Token 权限认证] 全局配置类* @author muze*/
@Configuration
public class SaTokenConfig {/*** 注册 [Sa-Token全局过滤器]*/@Beanpublic SaReactorFilter getSaReactorFilter() {return new SaReactorFilter()// 指定 [拦截路由].addInclude("/**")// 指定 [放行路由].addExclude("/login")// 指定[认证函数]: 每次请求执行登录校验.setAuth(obj -> StpUtil.checkLogin())// 指定[异常处理函数]:每次[认证函数]发生异常时执行此函数.setError(e -> SaResult.error(e.getMessage()));}
}
跨域解决方式
一、在全局过滤器中链式调用如下方法
                // 前置函数:在每次认证函数之前执行.setBeforeAuth(obj -> {SaHolder.getResponse()// ---------- 设置跨域响应头 ----------// 允许指定域访问跨域资源.setHeader("Access-Control-Allow-Origin", "*")// 允许所有请求方式.setHeader("Access-Control-Allow-Methods", "*")// 允许的header参数.setHeader("Access-Control-Allow-Headers", "*")// 有效时间.setHeader("Access-Control-Max-Age", "3600");// 如果是预检请求,则立即返回到前端SaRouter.match(SaHttpMethod.OPTIONS).free(r -> System.out.println("--------OPTIONS预检请求,不做处理")).back();});
二、自定义WebFlux配置
/*** 自定义WebFlux配置* 实现WebFlux接口* 覆写配置 CORS(跨源资源共享)策略方法* @author muze*/
@Configuration
public class CustomWebFluxConfig implements WebFluxConfigurer {/*** 配置 CORS(跨源资源共享)策略* @param corsRegistry 配置 CORS(跨源资源共享)策略的注册器*/@Overridepublic void addCorsMappings(CorsRegistry corsRegistry) {corsRegistry.addMapping("/**") // 允许跨域的路径.allowedOrigins("*") // 允许跨域请求的域名.allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的请求方法.allowedHeaders("*") // 允许的请求头.allowCredentials(true); // 允许证书(cookies)}
}

SpringBoot环境

Maven依赖
<!-- Sa-Token 权限认证 -->
<dependency><groupId>cn.dev33</groupId><artifactId>sa-token-spring-boot-starter</artifactId><version>1.39.0</version>
</dependency>
配置yml文件
############## Sa-Token 配置 ##############
sa-token: # token 名称(同时也是 cookie 名称)token-name: satoken# token 有效期(单位:秒) 默认30天,-1 代表永久有效timeout: 2592000# token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结active-timeout: -1# 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录)is-concurrent: true# 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token)is-share: true# token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik)token-style: uuid# 是否输出操作日志 is-log: true

集成好后我们只需要在登录业务中调用Sa-Token提供的登录API:login,传入用户主键即可

/*** 用户控制层* @author muze*/
@RestController
public class UserController {/*** 登录* @param username 用户名* @param password 密码* @return 登录结果*/@PostMapping("/login")public SaResult login(String username, String password) {// TODO:校验用户名和密码// 正确则调用login传入用户主键,返回登录结果StpUtil.login(1);return SaResult.ok("登录成功");}
}

这样就登录成功了,Sa-Token会生成一个令牌并保存到浏览器的cookie中,后续请求前端需要携带cookie中的令牌访问后端接口,网关会在全局过滤器中调用checkLogin去校验是否已经登录

如果我们的项目没有网关,那么我们就需要配置跨域和拦截器,每次请求在拦截器中进行登录验证

/*** 跨域配置* @author muze*/
@Configuration
public class WebConfig implements WebMvcConfigurer {/*** 添加跨域映射* @param registry Cross-Origin Resource Sharing Registry:跨域资源共享登记*/@Overridepublic void addCorsMappings(CorsRegistry registry) {// 允许跨域访问的URL模式registry.addMapping("/**")// 允许跨域请求的域名(ip:port).allowedOrigins("*")// 允许的方法.allowedMethods("GET", "POST", "PUT", "DELETE")// 允许的头信息.allowedHeaders("*")// 是否允许发送Cookie.allowCredentials(false);}/*** 添加拦截器* @param interceptorRegistry 注册拦截器实体*/@Overridepublic void addInterceptors(InterceptorRegistry interceptorRegistry) {//添加 Sa-Token 拦截器,校验规则为 登录校验 StpUtil.checkLogin()interceptorRegistry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin()))// 添加校验路径.addPathPatterns("/**")// 排除校验路径.excludePathPatterns("/login");}
}

到这里,一个Java集成Sa-Token并完成一个简单的登录和登录验证就完成了,还有很多简单好用的API,详情请参考官方在线文档:Sa-Token

总结

        当我们在职场中还接触不到认证与授权,但又希望了解并学习来提升自己和为未来做准备的话,可以进行自主学习,该篇文章就是小编的自主学习并使用的一些心得,希望能帮助到你们,感兴趣的朋友赶紧去试试吧,相信这篇文章能给你们一些帮助

相关文章:

Java集成Sa-Token进行认证与授权

引言 软件开发过程中都必须要有的一个功能&#xff0c;那就是认证与授权&#xff0c;经过大佬们的不断更新迭代&#xff0c;使得如今实现认证与授权功能变得相对简单&#xff0c;也许你并不能真正的接触到认证与授权这一功能&#xff0c;除非你接触的项目是从0到1的&#xff0c…...

【附录】Rust国内镜像设置

目录 前言 &#xff08;1&#xff09;设置环境变量 &#xff08;2&#xff09;安装Rust &#xff08;3&#xff09;设置crates镜像 前言 本节课来介绍下如何在国内高速下载安装Rust和Rust依赖&#xff0c;由于网络原因&#xff0c;我们在安装Rust和下载项目依赖时都很慢&am…...

Rust编程语言代码详细运行、编译方法

以下是针对不同类型的 Rust 代码&#xff08;以常见的命令行程序为例&#xff09;详细的运行方法&#xff1a; 前提条件 在运行 Rust 代码之前&#xff0c;确保你已经在系统上安装了 Rust 编程语言环境。如果尚未安装&#xff0c;可以通过以下步骤进行安装&#xff1a; 访问…...

Unity ShaderLab 实现交互地毯

实现思路&#xff1a; 将一个位置坐标值传入到shader的顶点着色器中&#xff0c;和这个值位置相同的顶点沿着法线的y轴方向偏移&#xff0c;然后计算这个值与顶点的距离&#xff0c;在这个范围内的顶点&#xff0c;和凸起的点的位置做插值操作。 Shader Graph实现如下&#x…...

Scala模式匹配——高阶用法

&#xff08;一&#xff09;scala的模式匹配 &#xff08;1&#xff09;常量 &#xff08;2&#xff09;变量 &#xff08;3&#xff09;构造器 &#xff08;4&#xff09;序列 &#xff08;5&#xff09;元组 &#xff08;6&#xff09;类型 &#xff08;7&#xff09;…...

【简单好抄保姆级教学】javascript调用本地exe程序(谷歌,edge,百度,主流浏览器都可以使用....)

javascript调用本地exe程序 详细操作步骤结果 详细操作步骤 在本地创建一个txt文件依次输入 1.指明所使用注册表编程器版本 Windows Registry Editor Version 5.00这是脚本的第一行&#xff0c;指明了所使用的注册表编辑器版本。这是必需的&#xff0c;以确保脚本能够被正确解…...

C#热更原理与HybridCLR

一、Mono的诞生 在Mono之前,C#虽然很好,但是只在windows家族平台上使用,就这点C#与Java就无法比。于是微软公司向ECMA申请将C#作为一种标准。在2001年12月,ECMA发布了ECMA-334 C#语言规范。C#在2003年成为一个ISO标准(ISO/IEC 23270)。意味着只要你遵守CLI(Common Lang…...

arcgis for js点击聚合要素查询其包含的所有要素

功能说明 上一篇讲了实现聚合效果, 但是点击聚合效果无法获取到该聚合点包含的所有点信息 这一篇是对如何实现该功能的案例 实现 各属性说明需要自行去官网查阅 官网案例 聚合API 没空说废话了, 加班到12点,得休息了, 直接运行代码看效果就行, 相关重点和注意事项都在代码注…...

k8s Init:ImagePullBackOff 的解决方法

kubectl describe po (pod名字) -n kube-system 可查看pod所在的节点信息 例如&#xff1a; kubectl describe po calico-node-2lcxx -n kube-system 执行拉取前先把用到的节点的源换了 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"re…...

HASH256开源代码计算错误问题

计算量超500KB报错 OTA升级中可能会涉及到CRC、hash校验等算法&#xff0c;小编从网上抄到了HASH256的源码&#xff0c;拿来使用的时候却发现了一个问题&#xff0c;当源文件约大于500KB的时候会发现其计算出的hash值出现错误。 经过实际测试得知&#xff0c;当源文件大于约50…...

对象流—ObjectInputStream 和 ObjectOutputStream

对象流(ObjectInputStream和ObjectOutputStream)是Java中用于读写对象的流&#xff0c;可以将对象直接写入到流中&#xff0c;或者从流中读取对象。 ObjectOutputStream将对象序列化为字节流&#xff0c;可以将对象写入文件或网络流中。ObjectInputStream则将字节流反序列化为…...

【Fargo】27:ffmpeg ffprobe 和python分析h264文件并绘制

从帧和包两个层面进行分析。帧级别分析 ffprobe 可以读取264文件信息 -Y9KP MINGW64 /d/XTRANS/thunderbolt/ayame/zhb-bifrost/player-only (main) $ ffprobe test.h264 ffprobe version N-116778-g7e4784e40c-20240827 Copyright (c) 2007-2024 the FFmpeg developersbuilt …...

Debezium Engine监听binlog实现缓存更新与业务解耦

飞书文档 解决缓存与数据源数据不一致的方案有很多, 各有优缺点; 1.0、旁路缓存策略, 直接同步更新 读取流程&#xff1a; 查询缓存。如果缓存命中&#xff0c;则直接返回结果。如果缓存未命中&#xff0c;则查询数据库。将数据库查询到的数据写入缓存&#xff0c;并设置一个…...

mysql_题库详解

1、如何创建和删除数据库&#xff1f; 1&#xff09;创建数据库 CREATE DATABASE 数据库名; 2&#xff09;删除数据库 drop database 数据库名; 2、MyISAM与InnoDB的区别&#xff1f; 1&#xff09;事务&#xff1a;MyISAM 不支持事务 InnoDB 支持 2&#xff09;行锁/表锁&a…...

docker查询是否运行

您可以通过运行以下命令来检查Docker是否正在运行&#xff1a; docker info 或者&#xff1a; docker ps 如果Docker正在运行&#xff0c;docker info将显示Docker的详细信息&#xff0c;而docker ps将列出当前运行的容器。如果Docker没有运行&#xff0c;这些命令将会返回错误…...

【AI日记】24.11.29 kaggle 比赛 Titanic-2 | 鼓励自己

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 核心工作 内容&#xff1a;学习 kaggle 入门比赛 Titanic - Machine Learning from Disaster&#xff0c;学习机器学习课程备注&#xff1a;入门比赛有很多 notebook 适合我这种新手学习&#xff0c;尤其是那…...

SVG无功补偿装置MATLAB仿真模型

“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介 SVG&#xff08;又称ASVG 或STATCOM&#xff09;是Static Var Generator 的缩写&#xff0c;叫做静止无功发生器。也是做无功补偿的&#xff0c;比SVC 更加先进。其基本原理是将自换相桥式电路通过电抗器或…...

2039:【例5.6】冒泡排序

【题目描述】 编程输入n(1≤n≤20)个小于1000非负整数&#xff0c;然后自动按从大到小的顺序输出。&#xff08;冒泡排序&#xff09; 【输入】 第一行&#xff0c;数的个数n; 第二行&#xff0c;n个非负整数。 【输出】 由大到小的n个非负整数&#xff0c;每个数占一行。 【输…...

yum源问题的解决方案

linux课堂作业 问题描述 yum 直接安装tree的问题截图 这个错误表明你的系统没有正确注册到 Red Hat Subscription Management&#xff08;这个问题不用管&#xff09;&#xff0c;也没有配置有效的 YUM 软件仓库&#xff0c;因此无法安装或更新软件包。 解决方案&#xff08…...

一文解析Kettle开源ETL工具!

ETL&#xff08;Extract, Transform, Load&#xff09;工具是用于数据抽取、转换和加载的软件工具&#xff0c;用于支持数据仓库和数据集成过程。Kettle作为传统的ETL工具备受用户推崇。本文就来详细说下Kettle。 一、Kettle是什么&#xff1f; Kettle 是一款开源的 ETL&#x…...

微积分复习笔记 Calculus Volume 2 - 3.1

The first 2 chapters of volume 2 are the same as those in volume 1. Started with Chapter 3. 3.1 Integration by Parts - Calculus Volume 2 | OpenStax...

linux环境搭建

1、**连接外网** ssh在192.168.4.x上运行sudo ip link set ens160 down ssh切换到192.168.3.x(外网ip)&#xff0c;运行sudo ip route add default via 192.168.2.1 dev ens192 onlink //连接外网 使用完外网后 ssh在192.168.3.x上运行sudo ip link set ens160 up ssh在1…...

黑马程序员Java笔记整理(day05)

1.面向对象编程 2.用法 3.对象是什么 4.对象在计算机中是啥 5.无参与有参构造器 小结: 6.this的作用 7.小结 8.封装 9.小结 10.实体类 11.小结 12.static 13.小结 14.static修饰方法 15.static应用前景 16.几个注意事项 17.java中可以直接用类的名字创建数组&#xff0c;如: M…...

DM达梦管理工具拖出空白区块,无法关闭

1. 出现问题&#xff1a;DM达梦管理工具拖出空白区块&#xff0c;无法关闭。 2. 解决方法 新建查询页&#xff0c;把查询页拖到空白区块里&#xff0c;完全覆盖空白区块。之后空白区块会变成查询页&#xff0c;右上角会出现叉号&#xff0c;点击叉号关闭就行。 3. 后记 达梦…...

Linux系统 异常控制流

文章目录 前言异常1. **中断&#xff08;interrupt&#xff09;**2. **陷阱和系统调用&#xff08;trap&#xff09;**3. **故障&#xff08;fault&#xff09;**4. **终止&#xff08;abort&#xff09;** 进程与信号非本地跳转 前言 下面内容大部分来自《深入理解计算机系统…...

Linux环境下配置neo4j图数据库

1.下载安装包 openjdk-11.0.1_linux-x64_bin.tar.gz neo4j-community-4.2.19-unix.tar.gz 2.之前配置好的配置文件 neo4j.conf 3.安装 3.1-jdk11的安装&#xff08;jdk1.8不够用&#xff09; 解压缩 tar -zxvf openjdk-11.0.1_linux-x64_bin.tar.gz修改系统环境变量 打开pro…...

python打包深度学习虚拟环境

今天师兄让我把环境打包发给他&#xff0c;我才知道可以直接打包深度学习虚拟环境&#xff0c;这样另一个人就不用辛辛苦苦的去装环境了&#xff0c;我们都知道有些论文他需要的环境很难装上。比如装Apex&#xff0c;装 DCN&#xff0c;mmcv-full 我现在把3090机子上的ppft虚拟…...

关于IDE的相关知识之一【使用技巧】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于ide使用技巧的相关内容&#xff01; 关于…...

Redis开发03:常见的Redis命令

1.输入以下命令&#xff0c;启动redis。 sudo service redis-server start 如果你是直接安装在WSL的&#xff0c;搜索栏搜索Ubuntu或者点击左下角Windows图表找到U那一栏&#xff0c;直接打开Ubentu&#xff0c;输入账密后&#xff0c;输入“sudo service redis-server start”…...

[OS] A4-前菜介绍

从你的描述来看&#xff0c;这段话是给你的一些 预备知识 和 mkfs工具的使用 提示&#xff0c;帮助你了解如何构建和管理文件系统&#xff0c;特别是关于 xv6 文件系统的一些基本操作。 我会通过比喻和通俗化的方式逐步解释&#xff1a; 预备知识&#xff1a;xv6 文件系统的基…...

2024农历年余下的数模比赛名单已出炉!

数学建模比赛季又来了&#xff01;作为一名资深的数学建模辅导老师&#xff0c;我想对你们说&#xff1a;这不仅是挑战智商的时候&#xff0c;也是展现团队合作力、数据分析能力和逻辑思维的最佳舞台&#xff01;&#x1f4a1; 如果你是建模新手&#xff0c;或者想让自己的比赛…...

在开发环境中,前端(手机端),后端(电脑端),那么应该如何设置iisExpress

首先&#xff0c;要想手机端应用能成功请求后端&#xff0c;两个设备至少需在同一个局域网内&#xff0c;且IP地址互通&#xff1b; 因为ajax是http(s)://IP地址端口号的方式请求&#xff0c;但是iisExpress默认是localhost如何解决&#xff0c;并没有IP地址&#xff0c;所以手…...

2.安装docker、docker compose

1. 安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm22. 设置阿里云docker-ce镜像源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3. docker-ce 安装 yum install -y docker-ce4. docker-compo…...

windows中idea选择bash作为控制台指令集,但是系统环境变量未在其中生效处理

1. 引言 在windows系统中安装node 以及npm时配置其环境&#xff0c;使用window环境变量的配置方式在系统环境变量设置的地方设置了环境变量如下图1-1&#xff0c;设置后在idea中的控制台通过 echo $PATH 查看环境变量发先跟系统中配置的不一致&#xff0c;而且node -v npm -v指…...

如何通过 ADB 安装 xapk

Android开发这么久,今天发现还能这么操作!😂 记录通过ADB安装xapk、apks的两种方式: 1.ADB命令安装使用APK-Splits技术分包的应用程序 这位大佬的方式步骤较为繁琐,不过兼容性应该较好,亲测成功安装。 2.How to install xapk, apks, or multiple-apks via adb? 这个…...

Docker使用教程

Docker 是一个开源的容器化平台&#xff0c;用于开发、打包和分发应用程序。它允许将应用及其依赖环境打包成容器&#xff0c;从而实现跨平台的便捷部署。下面是一个简单的 Docker 使用教程&#xff0c;涵盖从安装到基本命令的使用。 1. 安装 Docker Windows / MacOS 访问 D…...

我的创作纪念日

一、机缘 成为创作者的初衷是从学习C/C语法与数据结构过程中获得的灵感。在日常学习和项目实践中&#xff0c;我发现这些知识既丰富又复杂&#xff0c;对初学者而言尤为困难。因此&#xff0c;我决定通过博客记录自己的学习过程、解决思路以及代码实现&#xff0c;帮助更多人在…...

软件质量保证——单元测试之白盒技术

笔记内容及图片整理自XJTUSE “软件质量保证” 课程ppt&#xff0c;仅供学习交流使用&#xff0c;谢谢。 程序图 程序图定义 程序图P&#xff08;V,E&#xff09;&#xff0c;V是节点的集合&#xff08;节点是程序中的语句或语句片段&#xff09;&#xff0c;E是有向边的集合…...

redis中的哨兵

redis中的哨兵 一、哨兵机制的概念二、redis哨兵的部署2.1 docker的安装2.2 编排redis主从节点2.3 配置哨兵节点 三、redis哨兵的选举机制3.1 redis-master宕机之后的情况3.2 重启redis-master后的情况 四、redis哨兵机制的原理4.1主观下线4.2客观下线4.3选举leader节点4.4选出…...

开源对象存储新选择:在Docker上部署MinIO并实现远程管理

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器&#xff0c;可以在各种环境中运行&#xff0c;例如本地、Docker容器、Kubernetes集群等。它兼…...

15分钟做完一个小程序,腾讯这个工具有点东西

我记得很久之前&#xff0c;我们都在讲什么低代码/无代码平台&#xff0c;这个概念很久了&#xff0c;但是&#xff0c;一直没有很好的落地&#xff0c;整体的效果也不算好。 自从去年 ChatGPT 这类大模型大火以来&#xff0c;各大科技公司也都推出了很多 AI 代码助手&#xff…...

houdini肌肉刷pin点的方法

目标&#xff1a;产生gluetoanimation这个属性 主要节点&#xff1a;attribute paint(或者muscle paint) 步骤1&#xff1a; 导入肌肉资产 导入的是rest shape的肌肉 在有侧边栏可以打开display group and attribute list&#xff0c;方便查看group。不同的肌肉块按照muscl…...

Ubuntu20.04安装NVIDIA显卡驱动

Ubuntu20.04安装NVIDIA显卡驱动 参考资料&#xff1a;https://blog.csdn.net/weixin_39244242/article/details/136282614?fromshareblogdetail&sharetypeblogdetail&sharerId136282614&sharereferPC&sharesourceqq_37397652&sharefromfrom_link 成功配置…...

k8s删除网络组件错误

k8s集群删除calico网络组件重新部署flannel网络组件&#xff0c;再部署pod后出现报错不能分配ip地址 plugin type"calico" failed (add): error getting ClusterInformation: connection is unauthorized: Unauthorized 出现该问题是因为删除网络组件后&#xff0c;网…...

民锋视角:多元化策略实现资产稳健增长

在全球化经济的推动下&#xff0c;市场呈现出高度的复杂性与多样性。面对不同经济周期和市场动态&#xff0c;民锋以多元化投资策略为核心&#xff0c;帮助投资者在不确定性中实现资产的稳健增长。 一、多元化策略的核心价值 降低单一市场风险 单一资产或市场的表现可能因不可…...

[已解决]Visual Studio 2022中如何同时打开多个项目多个独立窗口

同时运行两个VS2022程序&#xff0c;即点击运行Visual Studio 2022.exe后&#xff0c;再点击运行一次运行Visual Studio 2022.exe&#xff0c;效果如图...

11、PyTorch中如何进行向量微分、矩阵微分与计算雅克比行列式

文章目录 1. Jacobian matrix2. python 代码 1. Jacobian matrix 计算 f ( x ) [ f 1 x 1 2 2 x 2 f 2 3 x 1 4 x 2 2 ] , J [ ∂ f 1 ∂ x 1 ∂ f 1 ∂ x 2 ∂ f 2 ∂ x 1 ∂ f 2 ∂ x 2 ] [ 2 x 1 2 3 8 x 2 ] \begin{equation} f(x)\begin{bmatrix} f_1x_1^22x_2\\…...

51c自动驾驶~合集35

我自己的原文哦~ https://blog.51cto.com/whaosoft/12206500 #纯视觉方案的智驾在大雾天还能用吗&#xff1f; 碰上大雾天气&#xff0c;纯视觉方案是如何识别车辆和障碍物的呢&#xff1f; 如果真的是纯纯的&#xff0c;特头铁的那种纯视觉方案的话。 可以简单粗暴的理解为…...

位图和布隆过滤器

目录 一.位图 1.位图的概念 2.位图的实现 3.位图的应用 二.布隆过滤器 1.布隆过滤器的概念 2.布隆过滤器的实现 3.布隆过滤器的优缺点 三.整体代码 1.bitset.h 2.BloomFilter 3.Hash.cpp 一.位图 1.位图的概念 1.面试题 给40亿个不重复的无符号整数&#xff0c;没…...

Java—I/O流

Java的I/O流&#xff08;输入/输出流&#xff09;是用于在程序和外部资源&#xff08;如文件、网络连接等&#xff09;之间进行数据交换的机制。通过I/O流&#xff0c;可以实现从外部资源读取数据&#xff08;输入流&#xff09;或将数据写入外部资源&#xff08;输出流&#x…...