CAS单点登录(第7版)22.中断通知

如有疑问,请看视频:CAS单点登录(第7版)

  1. 中断通知
    1. 概述
      1. 认证中断

CAS 能够暂停和中断身份验证流程以访问外部服务和资源,查询状态和设置,然后指示 CAS 应如何管理和控制 SSO 会话。中断服务能够向用户显示通知消息,提供重定向到外部服务的选项等。一个常见的使用案例涉及在身份验证流程期间显示公告板,以向选定的用户显示消息和公告,然后选择性地要求受众完成特定任务,然后 CAS 能够接受身份验证请求并建立会话。

在中断流中,CAS 目前不会返回到充当中断服务的外部资源,以存储、跟踪或记住用户的决策。换句话说,我们只处理 R(即。Read) 的 CRUD 中。今天的功能仅在只读模式下处理查询状态和读取结果。中断服务本身是必需的,并且鼓励将受众重定向到外部资源,其中执行操作会重置中断状态,从而释放 CAS 以稍后继续进行,而无需再次中断身份验证流。

      1. 配置

配置

通过在WAR覆盖中包含以下依赖项来启用支持:

阿帕奇Maven

学位

BOM - Spring

BOM - Gradle

资源

1

2

3

4

5

6

7

8

9

10

dependencies {

    /*

        The following platform references should be included automatically and are listed here for reference only.

        implementation enforcedPlatform("org.apereo.cas:cas-server-support-bom:${project.'cas.version'}")

        implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)

        

    */

    implementation "org.apereo.cas:cas-server-support-interrupt-webflow"}

以下设置和属性可从CAS配置曲库获得:

可选

笔记

下面列出的配置设置在CAS配置元数据中被标记为可选。该标志表示在最终用户CAS配置中不需要立即存在该设置,因为分配了默认值或功能的激活不受设置值的有条件控制。换句话说,如果您需要修改默认值或如果您需要打开由设置控制的功能,您应该只在您的配置中包含此字段。

Show  entries

搜索:

·  cas.interrupt.core.force-execution=false

是否应始终强制执行中断查询查询,并且应忽略中断检查的状态。这是一个全局设置,可以选择为每个应用程序策略否决。

 org.apereo.cas.configuration.model.support.interrupt.InterruptCoreProperties.

如何配置此属性?

·  cas.interrupt.core.trigger-mode=AFTER_AUTHENTICATION

定义在身份验证流程中应如何触发中断通知。可用值如下:

AFTER_AUTHENTICATION:触发中断通知和查询身份验证事件,并预先登录。

AFTER_SSO:单点登录后触发中断通知和查询。单点登录后执行的中断查询不能有条件地控制SSO会话的创建。

 org.apereo.cas.configuration.model.support.interrupt.InterruptCoreProperties.

如何配置此属性?

显示2个条目中的1到2个

上一个1下一个

      1. 中断负载

最终传递到 CAS 用户界面的中断响应有效载荷由下面描述的中断策略生成。无论生产者策略如何,有效负载结构都由以下 JSON 中断策略显示。

      1. 中断触发模式

请参阅本指南以了解更多信息。

      1. 中断策略

可以通过以下方式执行中断查询:

存储

描述

JSON 格式

请参阅本指南

Regex 属性

请参阅本指南

Groovy

请参阅本指南

REST

请参阅本指南

自定义

请参阅本指南

    1. 追踪
      1. 跟踪身份验证中断

中断查询的执行将作为专用 CAS cookie 和 specificauthentication 属性进行跟踪和记住。查询触发器的计算将考虑这两个选项,具体取决于 interrupt 是设置为在身份验证后触发还是单点登录。

默认跟踪机制还能够检测和拾取先前中断响应的变化,并在必要时重新中断用户。例如,如果用户被中断了一次,并且底层 dataand 中断负载自上次通知以来发生了变化,则 CAS 可能会再次中断用户流以处理最新版本的中断负载。

CAS 配置目录中提供了以下设置和属性:

必填

自选

签名和加密

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.interrupt.cookie.crypto.encryption.key=

加密密钥是一个 JWT,其长度由加密密钥大小设置定义。

此设置支持 Spring 表达式语言。

 org.apereo.cas.configuration.model.core.util.EncryptionJwtCryptoProperties.

如何配置此属性?

·  cas.interrupt.cookie.crypto.signing.key=

签名密钥是一个 JWT,其长度由签名密钥大小设置定义。

此设置支持 Spring 表达式语言。

 org.apereo.cas.configuration.model.core.util.SigningJwtCryptoProperties.

如何配置此属性?

显示 1 到 2 的 2 个条目

上一页1下一页

      1. 自定义

如果你想设计自己的中断跟踪机制,你可以插入 InterruptTrackingEngine 的自定义实现,它允许你自己处理这个问题:

1

2

3

4

@Beanpublic InterruptTrackingEngine interruptTrackingEngine() {

    return new MyInterruptTrackingEngine();}

请参阅本指南,了解有关如何将配置注册到 CAS 运行时的更多信息。

    1. 每个应用程序
      1. 跟踪每个服务的身份验证中断数

可以为应用程序定义分配一个专用的 webflow 中断策略。示例 JSON 文件如下:

1

2

3

4

5

6

7

8

9

10

11

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "^https://.+",

  "name" : "sample service",

  "id" : 100,

  "webflowInterruptPolicy" : {

    "@class" : "org.apereo.cas.services.DefaultRegisteredServiceWebflowInterruptPolicy",

    "enabled": true,

    "forceExecution": "TRUE"

  }}

 协议支持

身份验证中断应适用于 CAS 支持的所有客户端应用程序类型,而不管身份验证协议如何。无论您的应用程序使用 CAS、SAML2、OpenID Connect 等,中断策略都应该同样适用,并且它在应用程序定义中的配置方法保持不变。

支持以下策略设置:

描述

enabled

是否为此应用程序启用中断通知。默认值为 true。

forceExecution

无论如何,是否仍应继续执行。接受的值为 TRUEFALSE 或 UNDEFINED。

下面列出了其他中断触发器。

PRINCIPAL 属性

GROOVY 脚本

可以根据 principal 属性触发每个应用程序的中断触发器。如果定义的属性 name存在,并且可以产生与定义的属性值匹配的值,则可能会触发 interrupt。

描述

attributeName

用于与身份验证和主体属性名称进行比较的正则表达式模式以触发中断。

attributeValue

用于与身份验证进行比较的正则表达式模式,以及用于触发中断的 principal 属性值。

应用程序定义可以定义为:

1

2

3

4

5

6

7

8

9

10

11

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "^https://.+",

  "name" : "sample service",

  "id" : 100,

  "webflowInterruptPolicy" : {

    "@class" : "org.apereo.cas.services.DefaultRegisteredServiceWebflowInterruptPolicy",

    "attributeName": "mem...of",

    "attributeValue": "^st[a-z]ff$"

  }}

这些字段支持 Spring 表达式语言语法。

    1. 触发模式
      1. 身份验证中断触发模式

身份验证中断和通知使用以下策略之一在整个流程中执行。触发器策略是通过 CAS 设置全局定义的。

身份验证后

单点登录后

这是默认策略,允许中断查询在主身份验证事件之后和单点登录事件之前执行。这意味着 CAS 已识别经过身份验证的用户,并通过扩展对中断可用,并且中断能够决定是否可以为该用户建立单点登录会话。

 我们可以 SSO 到 Links 吗?

不。links集合只是链接,与 CAS 身份验证序列没有任何关联,这意味着它们不会激活该序列中的状态、转换或视图来触发 CAS 生成票证、执行某些操作等。这个集合中的任何链接都是这样的;只是一个链接。如果链接指向与 CAS 集成的应用程序,则通过该链接访问这些应用程序将再次提示用户输入凭据,尤其是在尚未建立单点登录的情况下。请记住,中断通知通常在身份验证步骤之后和创建任何单点登录会话之前执行。

请注意,在撰写本文时,中断触发模式是全局的,不能基于每个应用程序进行控制或定义。身份验证中断工作流的构造在初始化时烧录到 CAS webflow 中,并且在运行时不可更改,具体取决于应用程序或用户。

    1. 存储
      1. JSON格式
        1. JSON 身份验证中断

CAS 配置目录中提供了以下设置和属性:

必填

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.interrupt.json.location=

在 CAS 能够自动监视底层资源的更改并动态检测更新和修改的情况和场景中,您可以将以下设置指定为环境变量或系统属性,其值为 false,以禁用资源观察程序:org.apereo.cas.util.io.PathWatcherService。

 org.apereo.cas.configuration.model.support.interrupt.JsonInterruptProperties.

如何配置此属性?

显示 1 到 1 的 1 个条目

上一页1下一页

此策略访问静态 JSON 资源,该资源包含链接到各种中断策略的用户名映射。此选项在开发、测试和演示期间最有用。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

{

  "casuser" : {

    "message" : "Announcement message <strong>goes here</strong>.",

    "messageCode" : "interrupt.message.body",

    "links" : {

      "Go to Location1" : "https://www.location1.com",

      "Go to Location2" : "https://www.location2.com"

    },

    "block" : false,

    "ssoEnabled" : false,

    "interrupt" : true,

    "autoRedirect" : false,

    "autoRedirectAfterSeconds" : -1,

    "data" : {

      "field1" : [ "value1", "value2" ],

      "field2" : [ "value3", "value4" ]

    }

  }}

        1. 中断负载

每个中断策略最终的任务是生成包含以下设置的响应:

描述

message

要在屏幕上显示的公告消息。

links

要在屏幕上显示的链接映射,其中 key 是链接文本,value 是目标。

interrupt

true/false 指示 CAS 是否应中断身份验证流。

block

true/false 指示 CAS 是否应完全阻止身份验证流。

ssoEnabled

true/false 指示 CAS 是否应允许身份验证但不建立 SSO。

autoRedirect

true/false 来指示 CAS 是否应自动重定向到提供的第一个链接。

autoRedirectAfterSeconds

指示 CAS 是否应在配置的秒数后自动重定向。默认值为 -1,这意味着不应执行延迟重定向功能。

      1. Regex 属性
        1. 正则表达式属性身份验证中断

此策略允许在 CAS 设置中定义正则表达式模式,这些模式将与属性名称和值匹配。如果在 CAS 检查身份验证和主体属性的集合时生成了成功的匹配项,则身份验证流将中断。

CAS 配置目录中提供了以下设置和属性:

必填

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.interrupt.regex.attribute-name=

属性名称上的正则表达式模式,如果匹配,将成功完成中断通知触发器的第一个条件。

此设置支持正则表达式模式。[?].

 org.apereo.cas.configuration.model.support.interrupt.RegexInterruptProperties.

如何配置此属性?

·  cas.interrupt.regex.attribute-value=

属性值上的正则表达式模式,如果匹配,将成功完成中断通知触发器的第一个条件。

此设置支持正则表达式模式。[?].

 org.apereo.cas.configuration.model.support.interrupt.RegexInterruptProperties.

如何配置此属性?

显示 1 到 2 的 2 个条目

上一页1下一页

      1. Groovy 
        1. Groovy 身份验证中断

此策略与 Groovy 资源相联系,其工作是在给定提供的用户名和一定数量的其他参数的情况下动态计算是否应中断身份验证流。

该脚本可以定义为:

1

2

3

4

5

6

7

8

9

10

import org.apereo.cas.interrupt.InterruptResponse

def run(final Object... args) {

    def (principal,attributes,service,registeredService,requestContext,logger) = args

    ...

    def block = false

    def ssoEnabled = true

    return new InterruptResponse("Message", [link1:"google.com", link2:"yahoo.com"], block, ssoEnabled)}

CAS 配置目录中提供了以下设置和属性:

必填

Groovy 脚本

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.interrupt.groovy.location=

在 CAS 能够自动监视底层资源的更改并动态检测更新和修改的情况和场景中,您可以将以下设置指定为环境变量或系统属性,其值为 false,以禁用资源观察程序:org.apereo.cas.util.io.PathWatcherService。

 org.apereo.cas.configuration.model.support.interrupt.GroovyInterruptProperties.

如何配置此属性?

显示 1 到 1 的 1 个条目

上一页1下一页

以下参数将传递给脚本:

参数

描述

principal

已验证的主体。

attributes

MapMap<String, Object> 类型的映射,同时包含 principal 和 authentication 属性。

service

表示请求应用程序的 Service 对象。

registeredService

表示注册表中的服务定义的 RegisteredService 对象。

requestContext

表示 Spring Webflow RequestContext 的对象。

logger

负责发出日志消息的对象,例如 logger.info(...)

要准备 CAS 以支持 Apache Groovy 并与之集成,请查看本指南。

      1. REST 
        1. REST 身份验证中断

此策略伸向 REST 端点资源,其工作是在给定以下参数的情况下动态计算是否应中断身份验证流程:

参数

描述

username

经过身份验证的主体 ID。

service

请求应用程序的标识符 (URL)。

registeredService

已注册服务的标识符匹配并在注册表中找到。

在状态代码为 200 的成功操作中,响应正文应包含 JSON 有效负载,其语法和结构与上述内容相同。

CAS 配置目录中提供了以下设置和属性:

必填

自选

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.interrupt.rest.url=

用于联系和检索属性的终端节点 URL。

此设置支持 Spring 表达式语言。

 org.apereo.cas.configuration.model.support.interrupt.RestfulInterruptProperties.

如何配置此属性?

显示 1 到 1 的 1 个条目

上一页1下一页

      1. 自定义
        1. 自定义身份验证中断

如果你希望设计自己的 interrupt 策略来进行查询,你可以设计你的组件来做出决定:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

@AutoConfiguration@EnableConfigurationProperties(CasConfigurationProperties.class)public class MyInterruptConfiguration {

    @Bean

    public InterruptInquirer myInterruptInquirer() {

      ...

    }

    @Bean

    public InterruptInquiryExecutionPlanConfigurer myInterruptInquiryExecutionPlanConfigurer(

        @Qualifier("myInterruptInquirer")

        InterruptInquirer myInterruptInquirer) {

        return plan -> {

            plan.registerInterruptInquirer(myInterruptInquirer);

        };

    }}

请参阅本指南,了解有关如何将配置注册到 CAS 运行时的更多信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/970433.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQLMesh 系列教程4- 详解模型特点及模型类型

SQLMesh 作为一款强大的数据建模工具&#xff0c;以其灵活的模型设计和高效的增量处理能力脱颖而出。本文将详细介绍 SQLMesh 模型的特点和类型&#xff0c;帮助读者快速了解其强大功能。我们将深入探讨不同模型类型&#xff08;如增量模型、全量模型、SCD Type 2 等&#xff0…

遵循规则:利用大语言模型进行视频异常检测的推理

文章目录 速览摘要01 引言02 相关工作视频异常检测大语言模型 03 归纳3.1 视觉感知3.2 规则生成Normal and Anomaly &#xff08;正常与异常&#xff09;Abstract and Concrete &#xff08;抽象与具体&#xff09;Human and Environment &#xff08;人类与环境&#xff09; 3…

ISO9001| 分发受控号的详细说明及其管理方法 | QM-001/Rev. 01/002 (2023-10-15)

文章目录 引言I 分发受控号的详细说明及其管理方法1. 分发受控号的作用2. 分发受控号的组成3. 分发受控文件的管理流程4. 分发受控文件的管理工具5. 分发受控文件的示例表格6. ISO 9001 对文件控制的要求II 反例:各部门分发受控号III 常见问题引言 在质量管理体系(如 ISO 900…

CAS单点登录(第7版)18.日志和审计

如有疑问&#xff0c;请看视频&#xff1a;CAS单点登录&#xff08;第7版&#xff09; 日志和审计 Logging 概述 Logging CAS 提供了一个日志记录工具&#xff0c;用于记录重要信息事件&#xff0c;如身份验证成功和失败;可以对其进行自定义以生成用于故障排除的其他信息。…

机械学习常用的激活函数(ReLU 、Sigmoid、Tanh 、Softmax、Leaky ReLU、GELU、Swish、ELU、线性激活函数)

按照常用度大致从高到低排列的常用激活函数&#xff1a; ReLU 函数&#xff1a;计算简单、收敛速度快&#xff0c;能有效缓解梯度消失问题&#xff0c;在各种神经网络的隐藏层中广泛应用&#xff0c;是目前最常用的激活函数之一。Sigmoid 函数&#xff1a;常被用于将输出转换为…

前端面试题+算法题(二)

一、LeeCode 算法题 1、643. 子数组最大平均数 I 题目&#xff1a;给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。请你找出平均数最大且 长度为 k 的连续子数组&#xff0c;并输出该最大平均数。任何误差小于 10-5 的答案都将被视为正确答案。 场景1&#xff1a;输入…

【弹性计算】容器、裸金属

容器、裸金属 1.容器和云原生1.1 容器服务1.2 弹性容器实例1.3 函数计算 2.裸金属2.1 弹性裸金属服务器2.2 超级计算集群 1.容器和云原生 容器技术 起源于虚拟化技术&#xff0c;Docker 和虚拟机和谐共存&#xff0c;用户也找到了适合两者的应用场景&#xff0c;二者对比如下图…

DeepSeek、Kimi、文心一言、通义千问:AI 大语言模型的对比分析

在人工智能领域&#xff0c;DeepSeek、Kimi、文心一言和通义千问作为国内领先的 AI 大语言模型&#xff0c;各自展现出了独特的特点和优势。本文将从技术基础、应用场景、用户体验和价格与性价比等方面对这四个模型进行对比分析&#xff0c;帮助您更好地了解它们的特点和优势。…

DeepSeek 15天指导手册——从入门到精通

大家好&#xff0c;欢迎来到今天的教程&#xff01;前几天发表 DeepSeek 的文章&#xff0c;收到大家的一致好评。 YYDS&#xff01;WPS 集成 DeepSeek&#xff0c;办公从此更智能 DeepSeek使用技巧&#xff1a;9个技巧让AI助手变身超级英雄 今天我们为大家带来的是DeepSeek…

百问网(100ask)提供的烧写工具的原理和详解;将自己编译生成的u-boot镜像文件烧写到eMMC中

百问网(100ask)提供的烧写工具的原理 具体的实现原理见链接 http://wiki.100ask.org/100ask_imx6ull_tool 为了防止上面这个链接失效&#xff0c;我还对上面这个链接指向的页面保存成了mhtml文件&#xff0c;这个mhtml文件的百度网盘下载链接&#xff1a; https://pan.baidu.c…

Kafka分区管理大师指南:扩容、均衡、迁移与限流全解析

#作者&#xff1a;孙德新 文章目录 分区分配操作(kafka-reassign-partitions.sh)1.1 分区扩容、数据均衡、迁移(kafka-reassign-partitions.sh)1.2、修改topic分区partition的副本数&#xff08;扩缩容副本&#xff09;1.3、Partition Reassign场景限流1.4、节点内副本移动到不…

初阶c语言(练习题,猜随机数,关机程序)

目录 第一题&#xff0c;使用函数编写一个随机数&#xff0c;然后自己猜&#xff0c;猜随机数 第二道题&#xff08;关机程序&#xff09; 实现代码&#xff08;关机程序&#xff09; 实现代码&#xff08;猜数字&#xff09; 前言&#xff1a; 学习c语言&#xff0c;学习…

《千多桃花一世开》:南胥月为何爱暮悬铃

●前世故人&#xff1a;混沌珠神女 •一边不知情为何物时&#xff0c;一边又情不知所起&#xff0c;一往而深 上一世&#xff0c;他们还是神器的时候&#xff0c;混沌珠与天命书形影不离&#xff0c;为天命所创、为天命执行法则&#xff0c;如执行指令的机器&#xff0c;没有…

SpringBoot3 快速启动框架

文章目录 1 SpringBoot3 介绍 1.1 SpringBoot3 简介1.2 快速入门1.3 入门总结 2 SpringBoot3 配置文件 2.1 统一配置管理概述2.2 属性配置文件使用2.3 YAML配置文件使用2.4 批量配置文件注入2.5 多环境配置和使用 3 SpringBoot 整合 springMVC 3.1 实现过程3.2 web相关配置3.3…

21爬虫:使用playwright接管本地已经登录淘宝的浏览器并查找python相关店铺信息

1.playwright如何接管本地浏览器 &#xff08;1&#xff09;首先找到电脑上安装的Chrome浏览器可执行程序的完整路径&#xff1a; Mac电脑上可执行程序的完整路径为&#xff1a; /Applications/Google Chrome.app/Contents/MacOS/Google Chrome windows系统的电脑上查找可执行…

C++ Primer 返回值和return语句

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

【Java集合二】HashMap 详解

一、简介 1.1 概述 JDK1.8之前&#xff1a;HashMap使用数组链表实现&#xff0c;即使用链表处理冲突&#xff0c;同一hash值的节点都存储在一个链表里。但是当位于一个桶中的元素较多&#xff0c;即hash值相等的元素较多时&#xff0c;通过key值依次查找的效率较低。 JDK1.8…

3、树莓派5 安装VNC查看器 开启VNC服务器

在前序文章中&#xff08; 2、树莓派5第一次开机&#xff09;&#xff0c;可以使用三种方式开机&#xff0c;其中使用网线及wifi的方式均需要使用到VNC查看器进行远程桌面控制&#xff0c;本文将介绍如何下载安装并配置及使用VNC查看器及服务器&#xff0c;对前序文章做一些补充…

Flutter 常见布局模型

Flutter的常见的布局模型有容器&#xff08;Container&#xff09;、弹性盒子布局&#xff08;Flex、Row、Column、Expanded&#xff09;、流式布局&#xff08;Wrap、Flow&#xff09;、层叠布局&#xff08;Stack、Position&#xff09;、滚动布局&#xff08;ListView、Grid…

Java类与类的关系

类与类之间最常见的关系主要有以下三种&#xff1a; 依赖&#xff08;或uses–a&#xff09;聚合&#xff08;或has–a&#xff09;继承&#xff08;或is–a&#xff09; 依赖 依赖关系是类中最常见的关系&#xff0c;例如订单类&#xff08;order&#xff09;需要访问用户账…