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

Java 开发中主流安全框架的详细对比,涵盖 认证、授权、加密、安全策略 等核心功能,帮助开发者根据需求选择合适的方案

以下是 Java 开发中主流安全框架的详细对比,涵盖 认证、授权、加密、安全策略 等核心功能,帮助开发者根据需求选择合适的方案:


1. 主流安全框架对比表

框架名称类型核心功能适用场景优点缺点官网/文档
Spring Security企业级安全框架认证、授权、CSRF防护、OAuth2、JWT、自定义权限控制企业级应用、微服务、Spring Boot项目生态完善,功能全面,社区支持强大,支持主流安全标准(如OAuth2)配置复杂,学习曲线陡峭,轻量级项目可能过度设计Spring Security
Apache Shiro轻量级安全框架认证、授权、加密、会话管理、多环境支持(Web/非Web)中小型项目、独立应用、非Spring项目简单易用,配置灵活,支持细粒度权限控制(基于角色/权限的RBAC模型)社区活跃度较低,企业级扩展性较弱Apache Shiro
JAAS (Java Authentication)JDK内置框架认证、授权(基于Policy文件)需要底层控制的Java应用JDK原生支持,适合自定义认证模块开发功能较基础,缺乏现代安全协议支持(如OAuth2)Oracle JAAS
Keycloak单点登录(SSO)OAuth2、OpenID Connect、SSO、多因素认证(MFA)、用户管理、RBAC微服务、多应用集成、跨平台SSO功能丰富,提供Web界面,支持多协议,开箱即用部署复杂度高,需额外维护服务实例Keycloak
JWT (JSON Web Token)标准协议基于Token的无状态认证,支持签名和加密RESTful API、移动端、单点登录轻量级,无状态,适合分布式系统需结合框架使用(如Spring Security),Token泄露风险需谨慎处理JWT.io
OAuth2/JWT库协议实现库OAuth2服务器/客户端实现,JWT生成与验证(如Spring Security OAuth2、 Nimbus)API安全、第三方登录集成紧密集成主流框架,符合标准依赖具体框架实现,需自行处理部分逻辑Spring Security OAuth2
Bouncy Castle加密库提供AES、RSA、SHA等加密算法,支持国密SM2/SM4需要高级加密功能的场景功能全面,支持非标准算法(如国密)需自行集成,学习成本较高Bouncy Castle
Apache CXFWeb服务框架WS-Security、SOAP消息安全、加密与签名SOAP Web服务、企业级集成支持WS-*标准,适合传统企业服务架构配置复杂,现代RESTful项目较少使用Apache CXF
Pac4j轻量级安全库支持多种认证方式(OAuth、CAS、SAML)、多环境适配(Spring MVC/Play)需快速集成多种认证方式的项目灵活支持多种协议,配置简洁社区规模较小,功能深度有限Pac4j

2. 框架核心功能对比

(1) 认证方式
  • Spring Security:支持表单认证、OAuth2、JWT、LDAP、自定义认证(如数据库验证)。
  • Apache Shiro:支持Token、LDAP、数据库、RememberMe等,支持多Realm(认证模块)。
  • Keycloak:支持Social Login(如Google、GitHub)、多因素认证(MFA)、SAML/OIDC。
  • JWT:基于Token的无状态认证,需配合签名算法(如HMAC、RSA)。
(2) 授权模型
  • RBAC(基于角色):Shiro、Spring Security均支持。
  • ABAC(基于属性):Spring Security通过@PreAuthorize表达式实现。
  • CASL(Context Aware Security Language):需结合其他框架(如Spring)。
(3) 性能与扩展性
  • 轻量级框架:Shiro、Pac4j适合中小型项目,启动快、配置简单。
  • 企业级框架:Spring Security、Keycloak适合高并发、复杂权限场景。
  • 加密库:Bouncy Castle需自行集成,但支持更复杂的加密需求(如国密)。
(4) 社区与生态
  • Spring Security:Spring生态核心组件,文档丰富,社区活跃。
  • Keycloak:Red Hat维护,适合Red Hat生态(如WildFly、EAP)。
  • Apache Shiro:Apache基金会项目,但更新频率较低。

3. 典型场景选择建议

需求推荐框架说明
企业级Spring Boot应用Spring Security生态完善,支持OAuth2、JWT,与Spring Data无缝集成。
非Spring的中小型项目Apache Shiro简单配置,支持细粒度权限控制。
单点登录(SSO)跨系统集成Keycloak提供Web界面,支持多协议(OAuth2、SAML),适合多应用统一管理。
REST API安全(无状态)Spring Security + JWT结合Spring Security的OAuth2模块或直接使用JWT库(如Nimbus)。
高加密需求(如国密算法)Bouncy Castle + 自定义框架需结合业务逻辑实现加密策略。
快速集成多种认证方式(OAuth/SAML)Pac4j简化多种协议集成,适合敏捷开发。

4. 代码示例(Spring Security配置)

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/api/public/**").permitAll() // 公开接口.antMatchers("/api/admin/**").hasRole("ADMIN") // 管理员权限.anyRequest().authenticated() // 其他接口需认证.and().oauth2Login() // 启用OAuth2登录.loginPage("/login") // 自定义登录页面.and().csrf().disable(); // 关闭CSRF(测试环境)}@Beanpublic BCryptPasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}
}

5. 总结

  • Spring Security:首选企业级安全框架,适合复杂场景。
  • Shiro:中小型项目的轻量级选择。
  • Keycloak:SSO和多协议集成首选。
  • JWT/Bouncy Castle:特定场景(API安全、加密)的补充工具。

根据项目规模、技术栈和安全需求,选择最合适的框架组合!

相关文章:

Java 开发中主流安全框架的详细对比,涵盖 认证、授权、加密、安全策略 等核心功能,帮助开发者根据需求选择合适的方案

以下是 Java 开发中主流安全框架的详细对比,涵盖 认证、授权、加密、安全策略 等核心功能,帮助开发者根据需求选择合适的方案: 1. 主流安全框架对比表 框架名称类型核心功能适用场景优点缺点官网/文档Spring Security企业级安全框架认证、授…...

【TVM教程】在支持 CMSIS-NN 的 Arm(R) Cortex(R)-M55 CPU 和 Ethos(TM)-U55 NPU 裸机上运行 TVM

Apache TVM是一个深度的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。更多 TVM 中文文档可访问 →https://tvm.hyper.ai/ 作者:Grant Watson 本节使用示例说明如何使用 TVM 在带有 CMSIS-NN 的 Arm Cortex-M55 CPU 和 Ethos™-U55 NPU 的…...

【Ai/Agent】Windows11中安装CrewAI过程中的错误解决记录

CrewAi是什么,可以看之下之前写的 《初识CrewAI多智能代理团队协框架》 (注:这篇是基于linux系统下安装实践的) 基于以下记录解决问题后,可以再回到之前的文章继续进行CrewAI的安装 遇到问题 在windows系统中安装 CrewAi 不管是使用 pip 或者…...

洛谷 P11962:[GESP202503 六级] 树上漫步 ← dfs + 邻接表

【题目来源】 https://www.luogu.com.cn/problem/P11962 【题目描述】 小 A 有一棵 n 个结点的树,这些结点依次以 1,2,⋯,n 标号。 小 A 想在这棵树上漫步。具体来说,小 A 会从树上的某个结点出发,每⼀步可以移动到与当前结点相邻的结点&…...

Linux shell脚本编程

什么是Shell程序设计? 也就是给计算机发命令,让它帮你做事,你通过shell 的小工具,用键盘输入指令,linux就会根据这些指令去执行任务,就像你法号一个指令一样。 shell的强大之处? 文件处理&a…...

嵌入式硬件篇---Uart和Zigbee

文章目录 前言一、UART(通用异步收发传输器)1. 基本概念2. 工作原理帧结构起始位数据位校验位停止位 异步通信波特率 3. 特点优点缺点 4. 典型应用 二、ZigBee1. 基本概念2. 技术细节工作频段2.4GHz868MHz 网络拓扑星型网络网状网络簇状网络 协议栈物理层…...

Linux Makefile-概述、语句格式、编写规则、多文件编程、Makefile变量分类:自定义变量、预定义变量

目录 1.make 1.1 make 命令格式 2.Makefile 核心概念‌ ‌ 2.1创建并运行 Makefile步骤 3. Makefile编写 3.1最基础Makefile 3.1.1使用默认make命令 3.1.2使用make -f 命令 3.1.3 gcc编译常用组合选项 3.1.4 make 和 make all区别 3.1.4.1 all 是默认目标 3.1.4.2 al…...

Kotlin日常使用函数记录

文章目录 前言字符串集合1.两个集合的差集2.集合转数组2.1.集合转基本数据类型数组2.2.集合转对象数组 Map1.合并Map1.1.使用 操作符1.2.使用 操作符1.3.使用 putAll 方法1.4.使用 merge 函数 前言 记录一些kotlin开发中,日常使用的函数和方式之类的,…...

【JavaScript】异步编程

个人主页:Guiat 归属专栏:HTML CSS JavaScript 文章目录 1. 异步编程基础1.1 同步与异步1.1.1 同步执行1.1.2 异步执行 1.2 JavaScript 事件循环 2. 回调函数2.1 基本回调模式2.2 错误处理2.3 回调地狱 3. Promise3.1 Promise 基础3.2 Promise 链式调用3…...

批量合并多张 jpg/png 图片为长图或者 PDF 文件,支持按文件夹合并图片

我们经常会碰到需要将多张图片拼成一张图片的场景,比如将多张图片拼成九宫格图片,或者将多张图片拼成一张长图。还有可能会碰到需要将多张图片合并成一个完整的 PDF 文件来方便我们进行打印或者传输等操作。那这些将图片合并成一张图片或者一个完整的文档…...

使用docker 安装向量数据库Milvus

Miluvs 官网 www.milvus.io/ https://milvus.io/docs/zh/install_standalone-docker-compose-gpu.md 一、基本概念 向量数据库:Milvus是一款云原生向量数据库,它支持多种类型的向量,如浮点向量、二进制向量等,并且可以处理大规模…...

在线PDF文件拆分工具,小白工具功能实用操作简单,无需安装的文档处理工具

小白工具中的在线 PDF 文件拆分工具是一款功能实用、操作便捷的文档处理工具,以下是其具体介绍: 操作流程 上传 PDF 文档:打开小白工具在线PDF文件拆分工具 - 快速、免费拆分PDF文档 - 小白工具的在线 PDF 文件拆分页面,通过点击 …...

Blender画图——阵列使用

如图我需要多个图示的图形,并且排成一个阵列效果。 如图依次点击效果。不要用相对偏移,要用恒定偏移。 如图设置数量。 如图完成x方向的画图后,我们需要在y方向再用一个阵列。...

VSCode 常用快捷键

Visual Studio Code (VSCode) 提供了许多快捷键,以帮助开发者提高编码效率。以下是一些常用的 VSCode 快捷键,这些快捷键适用于大多数操作系统,但在 macOS 上可能会有所不同(通常是将 Ctrl 替换为 Cmd)。 1. 文件和编…...

缓存相关问题

Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制 Redis 为什么…...

每日一题(小白)暴力娱乐篇22

为什么要经常学习暴力和一些娱乐呢?因为对于我们来说,暴力是最直接的方式是肯定能满足一部分答案的方法,娱乐是为了让算法变得更有趣,你愿意多去尝试多去练习,这才是最要紧的。 由题意知,就是计算两个数字…...

深入理解 Vuex:核心概念、API 详解与最佳实践

目录 Vuex 简介核心概念与工作流程核心 API 详解模块化开发 (modules)插件(Plugins)与扩展高级技巧与最佳实践 Vuex 简介 Vuex 是 Vue.js 的官方状态管理库,专为复杂应用设计,用于集中管理所有组件的共享状…...

成为一种国家战略范畴的新基建的智慧园区开源了。

智慧园区场景视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界…...

拜特科技助力科达制造,资金管理信息化迈入新阶段

近日,拜特科技成功签约科达制造股份有限公司(以下简称“科达制造”)资金管理系统升级项目。科达制造通过资金管理系统的不断迭代升级和优化,能够更加高效地管理和运用资金,提高企业的资金利用效率,满足企业…...

每日一题(小白)暴力娱乐篇20

这个题用瞪眼法解决,snakeaekns 代码如下👇 public static void main(String[] args) {Scanner scannew Scanner(System.in);System.out.println("aekns");scan.close();} 第二种方式:将snack拆解,按照大小进行排序。…...

Flutter iOS 项目中 VolumeControllerPlugin 报错解决方案

Flutter iOS 项目中 VolumeControllerPlugin 报错解决方案 在开发 Flutter 应用时,有时会遇到 iOS 项目构建失败的情况,其中一种较为常见的错误是与 VolumeControllerPlugin 相关的报错,错误信息如下: Could not build the prec…...

Java实战报错 tcp

为什么报错tcp Preview 从图片中的错误信息来看,程序遇到了 java.net.BindException,具体错误信息是 "Address already in use: bind"。这意味着你的程序试图绑定到一个已经被其他进程占用的端口(在本例中是9999端口)。…...

【补题】P10424 [蓝桥杯 2024 省 B] 好数(数位dp)

题意: 一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位……)上的数字是奇数,偶数位(十位、千位、十万位……)上的数字是偶数,我们就称之为“好数”。 给定一个正整数 N…...

控制 ElementUI el-table 树形表格多选框的显示层级

1、你可以通过 selectable 属性来控制哪些行可以选择&#xff08;显示多选框&#xff09; <el-table:data"tableData"row-key"id"default-expand-all:tree-props"{children: children, hasChildren: hasChildren}"select"handleSelect&…...

今日行情明日机会——20250409

今日行情还需要考虑关税对抗~ 2025年4月8日涨停的主要行业方向分析 1. 军工&#xff08;19家涨停&#xff09; 细分领域&#xff1a;国防装备、航空航天、军民融合。催化因素&#xff1a;国家安全战略升级、国防预算增加、重大军工项目落地预期。 2. 免税&#xff08;15家涨…...

基础知识补充篇:什么是DAPP前端连接中的provider

专栏:区块链入门到放弃查看目录-CSDN博客文章浏览阅读352次。为了方便查看将本专栏的所有内容列出目录,按照顺序查看即可。后续也会在此规划一下后续内容,因此如果遇到不能点击的,代表还没有更新。声明:文中所出观点大多数源于笔者多年开发经验所总结,如果你想要知道区块…...

47常用控件_QWidget的toolTip属性

一个 GUI 程序,界面比较复杂, 按啥的很多~~ 当你把鼠标悬停到这个控件上的时候,就能弹出一个提示~~ setToolTip&#xff1a;设置提示内容 setToolTipDuring&#xff1a;设置提示的时间 toolTip 只是给用户看的.在代码中一般不需要获取到 toolTip. 代码示例: 设置按钮的 toolT…...

解密工业控制柜:认识关键硬件(PLC)

前言 作为一名视觉开发工程师&#xff0c;我们不仅要做到做好自己的工作&#xff0c;我们更需要在工业现场学习更多知识&#xff0c;最近网上流传很多&#xff0c;“教会徒弟&#xff0c;饿死师傅”&#xff1b;在自动化行业中&#xff0c;在项目下来很忙的时候&#xff0c;我们…...

PDF编辑,小白工具功能丰富多样,在线无需下载,操作便捷,新手小白必备

在当今数字化办公和学习的时代&#xff0c;PDF 文件的使用极为广泛&#xff0c;而小白工具的在线 PDF 浏览器以其强大且丰富的功能&#xff0c;成为了一款不可多得的优质 PDF 阅读工具&#xff0c;PDF编辑,在线无需下载,操作便捷,新手小白必备以下为您详细推荐&#xff1a; 功能…...

网络安全公司推荐:F5荣膺IDC全球Web应用与API防护领导者

API的广泛使用正推动安全实践的重大变革。研究表明&#xff0c;有41%的企业管理的API数量至少与应用数量相等&#xff0c;因此企业亟需实现全面的API防护。近日&#xff0c;IDC发布《IDC MarketScape&#xff1a;2024年全球Web应用和API防护企业平台供应商评估报告》&#xff0…...

WPF轮播图动画交互 动画缩放展示图片

WPF轮播图动画交互 动画缩放展示图片 效果如下图&#xff1a; XAML代码&#xff1a; <Window x:Class"Caroursel.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/20…...

玩转Docker | 使用Docker安装FileDrop文件共享工具

玩转Docker | 使用Docker安装FileDrop文件共享工具 前言一、FileDrop介绍FileDrop简介主要特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署FileDrop服务下载镜像创建容器检查容器状态检查服务端口安全设置四、访问FileDrop应用创建名称五、测试与使用…...

实战篇-主时钟约束

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据 总结 前言 这是对B站傅里叶的猫视频时钟约束的笔记 一、主时钟约束 report_clock_networks …...

Oracle JDBC驱动 ojdbc14:使用指南与版本说明(附资源下载)

ojdbc14 是 Oracle 公司提供的 JDBC&#xff08;Java 数据库连接&#xff09;驱动程序&#xff0c;用于连接 Java 应用程序与 Oracle 数据库。 ojdbc14.jar包已下载&#xff1a;https://pan.quark.cn/s/5ee7841dcd9c 关键信息 用途&#xff1a;使 Java 应用程序能够连接 Orac…...

spring mvc 异常处理中@RestControllerAdvice 和 @ControllerAdvice 对比详解

RestControllerAdvice 和 ControllerAdvice 对比详解 1. 基本概念 注解等效组合核心作用ControllerAdviceComponent RequestMapping&#xff08;隐式&#xff09;定义全局控制器增强类&#xff0c;处理跨控制器的异常、数据绑定或全局响应逻辑。RestControllerAdviceControll…...

单元测试原则之——不要过度模拟

什么是过度模拟? 过度模拟(over-mocking)是指在单元测试中,模拟了太多依赖项,甚至模拟了本不需要模拟的简单对象或行为。过度模拟会导致: 测试代码变得复杂,难以阅读和维护。测试逻辑偏离了实际业务逻辑,无法验证真实代码的行为。忽略了被测单元与依赖项之间的真实交互…...

云轴科技ZStackCTO王为:AI Infra平台具备解决私有化AI全栈难题能力

4月1-2日&#xff0c;2025中国生成式AI大会在北京举办&#xff0c;该会议已成为国内AI领域最具影响力的产业峰会之一。云轴科技ZStack CTO王为受邀在“大模型”峰会上发表主题为《AI 原生实践&#xff1a;企业实际场景的 AI 赋能与 Infra 实践探索》演讲&#xff0c;并参加《De…...

牛客 小苯的Z串匹配

注意数组元素是0的情况 #include<iostream> using namespace std;int t; const int N2e510;int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>t;while(t){long long n;cin>>n;long long a[N];for(int i0; i<n; i) cin>>a[i];stri…...

拜特科技受邀参加跨境电商行业分会,共探资金管理数字化与AI应用新路径

3月12日&#xff0c;由广东省首席信息官协会主办的“跨境电商行业分会——走进绿联科技”活动在深圳绿联科技圆满举行。作为专注于金融科技与资金管理数字化解决方案的领先提供商&#xff0c;拜特科技受邀参加此次会议&#xff0c;与行业精英共同探讨跨境电商企业的资金管理数字…...

贪心算法(17)(java)可被三整除的最大整数和

给你一个整数数组 nums&#xff0c;请你找出并返回能被三整除的元素 最大和。 示例 1&#xff1a; 输入&#xff1a;nums [3,6,5,1,8] 输出&#xff1a;18 解释&#xff1a;选出数字 3, 6, 1 和 8&#xff0c;它们的和是 18&#xff08;可被 3 整除的最大和&#xff09;。 …...

架构师面试(二十八):业务建模

问题 今天我们撇开纯技术&#xff0c;聊一下关于【业务建模】的话题。 何为业务建模&#xff1f;即通过易于理解的模型将业务中的关键问题准确表达出来。 业务建模是需求分析环节乃至整个软件生命周期中非常关键的一环&#xff0c;它几乎决定了软件的开发周期和成本。下面关…...

求教:vue中的find()函数的用法this.$set

需求&#xff1a;为了实现联动&#xff0c;当我在选择问题标题之后&#xff0c;后面几列的内容就会自动联动显示 方案一&#xff1a; 选完之后 直接 是this.questionList[index] this.selected; 这样的效果虽然改动了数组&#xff0c;但是页面上没有显示出来实际数组的内容 …...

常见算法模板总结

文章目录 一、二叉树1. DFS2. BFS 二、回溯模板三、记忆化搜索四、动态规划1. 01背包朴素版本滚动数组优化 2. 完全背包朴素版本滚动数组优化 3. 最长递增子序列LIS朴素版本贪心二分优化 4. 最长公共子序列5. 最长回文子串 五、滑动窗口六、二分查找七、单调栈八、单调队列九、…...

生产者消费者模型

目录 一、生产者消费者模型 1. 生产者消费者模型是什么&#xff1f; 2. 为什么使用生产者消费者模型&#xff1f; 3. 生产者消费者模型的特点&#xff08;321原则&#xff09; &#x1f335;3种关系 &#x1f335;2种角色 &#x1f335;1个交易场所 二、基于BlockingQue…...

linux里怎么禁用 其他用户使用sudo添加定时器,例如创建的tomcat用户禁止使用 sudo crontab -u tomcat -e 添加定时器

要禁止 tomcat 用户通过 sudo crontab -u tomcat -e 添加定时任务&#xff0c;需从 sudo 权限控制和 crontab 访问限制两方面入手。以下是具体步骤&#xff1a; 一、核心思路 禁止 tomcat 用户使用 sudo 提权执行 crontab 修改 /etc/sudoers 配置&#xff0c;移除 tomcat 用户…...

函数作为返回值输出

实际上&#xff0c;函数当做返回值输出的应用场景也很多&#xff0c;也更能体现函数式变成的巧妙&#xff0c;让函数继续返回一个可执行的函数&#xff0c;意味着运算过程是可延续的。 判断数据的类型 常见的判断一个数据的类型的函数&#xff1a; 单例模式 下面是一个单例模…...

黑马 SpringAI+DeepSeek 实战:从对话机器人到企业级知识库的大模型开发全攻略

附完整代码 项目案例&#xff0c;3 天吃透大模型应用开发核心技术 需要完整项目学习视频以及源码的私信博主&#xff0c;谢谢~大家一起加油呐&#xff01;&#xff01; 01.认识AI和大模型 小结 AI的发展过程 符号主义 机器学习 深度学习——自然语言处理&#xff08;NLP…...

word表格间隔设置

1.怎么解决word表格间隔达不到我们想要的要求 其实很简单, 我们直接在word表格里面, 全选表格中里面的内容。接着,我们选择自动调整---->根据内容自动调整表格,即可达到我们想要的要求...

Windows批处理脚本,bat 循环数组进入文件夹进行后续操作

文章目录 前言一、脚本功能解析1.2、定义数组1.2、遍历数组1.2、处理每个数组元素1.2、循环控制1.2、结束脚本 二、之前编写的脚本三、优化后的脚本代码四、总结五、感谢 前言 Windows批处理脚本&#xff0c;主要功能是遍历一个预定义的数组&#xff0c;并对每个数组元素执行cd…...

TurtleBot3 Package turtlebot3_drive source code read

前言 此处阅读简单的 turtlebot3_drive 代码。 从ROS的角度&#xff0c;作为一个demo&#xff0c;它足够小、简单&#xff0c;可以从中看见ROS的 NodeHandle如何使用。此外&#xff0c;我们也能简单地看到 “自动避障功能的实现”。 从C的角度&#xff0c;它实际上并不复杂&…...