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

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

  1. 日志和审计
    1. Logging
      1. 概述
        1. Logging

CAS 提供了一个日志记录工具,用于记录重要信息事件,如身份验证成功和失败;可以对其进行自定义以生成用于故障排除的其他信息。默认情况下,CAS 使用 Slf4jLogging 框架作为 Log4j 引擎的外观。

默认的 log4j 配置文件位于 cas-server-webapp-resources 源模块的 src/main/resources/log4j2.xml 中。在 cas.war 中,它位于 cas-server-webapp-resources*.jar 的根目录下。cas-overlay 在 etc/cas/config 中带有一个外部log42.xml,并设置了一个属性 logging.config=file:/etc/cas/config/log4j2.xml 来引用它。默认情况下,对于与 org.apereo.cas 代码相关的所有功能,日志记录都设置为 INFO。出于调试和诊断目的,您可能希望将这些级别设置为 DEBUG 或 TRACE。

 生产

您应该始终在WARN 下运行所有内容。在生产环境中,警告和错误是您关心的事情。其他一切都只是诊断。仅在您需要研究特定问题时才打开 DEBUG 或 INFO。

        1. 执行器端点

提供了以下终端节点:

  GET

/cas/actuator/loggingConfig/stream 

从所有配置为捕获日志的 CAS appender 中获取最后 X 个日志条目。

  GET

/cas/actuator/loggingConfig 

  GET

/cas/actuator/loggers/{name} 

  GET

/cas/actuator/loggers 

  POST

/cas/actuator/loggers/{name} 

  GET

/cas/actuator/logfile 

CAS 插件

CAS 使用的 log4j2.xml 文件包括自定义 Log4j2 插件:

CasAppender:CasAppender 包装另一个常规 appender 并从日志条目中删除敏感值,例如 Ticket Granting Tickets 或 Proxy Granting Tickets。它可以通过以下 Log4j2 配置模板使用:

1

2

3

4

5

6

7

<?xml version="1.0" encoding="UTF-8" ?><Configuration monitorInterval="2" packages="org.apereo.cas.logging">

  <!-- Wrap the console appender inside -->

  <CasAppender name="casConsole" maxEntries="50">

      <AppenderRef ref="console" />

  </CasAppender></Configuration>

maxEntries 属性指示要保留在内存缓存中的最新日志条目的最大数量。当高速缓存已满时,将删除最早的条目。默认情况下,缓存中不保留任何内容。当您想通过 actuator endpoints 等流式传输最新的日志条目时,此功能非常有用。

ExceptionOnlyFilter:为了允许 CAS 在 WARN 和 ERROR 处自由记录意外错误,而不会用堆栈跟踪掩盖所有内容,默认情况下,日志中的异常处于禁用状态,但有log4j2.xml属性可以重新打开它们。默认情况下,所有异常都写入专用的堆栈跟踪滚动日志文件,这是使用嵌套在 CasAppender 中的自定义ExceptionOnlyFilter完成的。

        1. Log4j2 属性

log4j2.xml 文件包含各种设置的属性,这些设置可以在 log4j2.xml 文件的 properties 部分中设置,在 Classpath 上名为 log4j2.component.properties 的属性文件中设置,或者作为系统属性进行设置。如果在 log4j2.component.properties 中设置属性,请务必包含:

1

log4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

以便继续使用 CAS 默认设置的异步日志记录。要关闭异步日志记录,请在 log4j2.component.properites 中包含以下内容或作为系统属性:

1

log4j2.contextSelector=org.apache.logging.log4j.core.selector.BasicContextSelector

        1. 配置

将 log4j2.xml 文件外部化到系统路径以在升级之间保留设置通常很有帮助。默认情况下log4j2.xml文件的位置位于运行时 Classpath 上,并且可以通过 CAS 属性进行控制。

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

必填

自选

第三方

笔记

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

Show  entries

搜索:

·  cas.logging.cloudwatch.credential-access-key=

使用 AWS 提供的访问密钥进行身份验证。

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

 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties.

如何配置此属性?

·  cas.logging.cloudwatch.credential-secret-key=

使用 AWS 提供的密钥进行身份验证。

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

 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties.

如何配置此属性?

·  cas.logging.cloudwatch.endpoint=

AWS 自定义终端节点。

 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties.

如何配置此属性?

·  cas.logging.cloudwatch.log-group-name=

日志组是一个容器,用于组织和存储共享相同保留、监控和访问控制设置的日志流。每个日志组都可以有一个唯一的名称,您可以将其视为与特定应用程序、服务或环境相关的日志的逻辑分组。

 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties.

如何配置此属性?

·  cas.logging.cloudwatch.log-stream-name=

日志流是共享同一源的一系列日志事件。每个日志流都属于一个日志组,您可以在一个日志组中拥有多个日志流。日志流通常用于分隔来自同一应用程序或服务中不同来源的日志数据。

 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties.

如何配置此属性?

显示 1 到 5 的 8 个条目

上一页12下一页

要禁用日志清理,请使用 system 属性 CAS_TICKET_ID_SANITIZE_SKIP=true 启动容器。

          1. 日志级别

虽然可以通过本机 log4j2.xml 语法直接处理对数级别,但也可以使用通常的 CAS 属性对其进行修改。

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

第三方

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Third Party(第三方)。此标志表示配置设置不受 CAS 生态系统的控制、拥有或管理,并且会影响第三方库(如 Spring Boot 或 Spring Cloud to CAS)提供的功能。有关更多信息,您可能必须访问第三方来源以查找更多详细信息。

Show  entries

搜索:

·  logging.level=

日志级别严重性映射。例如,'logging.level.org.springframework=DEBUG'。

 org.springframework.boot.context.logging.LoggingApplicationListener.

如何配置此属性?

显示 1 到 1 的 1 个条目

上一页1下一页

          1. 刷新间隔

log4j2.xml 本身控制日志记录配置的刷新间隔。Log4j 能够自动检测配置文件的更改并重新配置自身。如果在配置元素上指定了 monitorInterval属性并将其设置为非零值,则将在下次评估和/或记录日志事件时检查该文件,并且 monitorInterval 自上次检查以来已过去。这将允许您在不重新启动服务器环境的情况下调整日志级别和配置。

1

2

3

4

<!-- Specify the refresh internal in seconds. --><Configuration monitorInterval="15" ...>

    ...</Configuration>

          1. 附加程序

Appender 负责将日志事件传送到其目标。Appenders 通常只负责将事件数据写入目标目标。在大多数情况下,他们将设置事件格式的责任委托给布局。一些 appender 包装其他 appender,以便它们可以修改日志事件、处理 Appender 中的故障、根据高级过滤条件将事件路由到从属 Appender 或提供不直接格式化事件以供查看的类似功能。Appender始终具有名称,以便可以从 Logger中引用它们。

以下 Appender 元素只是可用选项的部分集合。

布局

描述

AsyncAppender

接受对其他 Appender 的引用,并导致在单独的 Thread 上将 LogEvents 写入它们。

CassandraAppender

将其输出写入 Apache Cassandra 数据库。必须提前配置键空间和表,并且列应在配置文件中映射。

ConsoleAppender

将其输出写入 System.out 或 System.err,并将 System.out 作为默认目标。

FailoverAppender

包装一组 appender。如果主 Appender 失败,则将按顺序尝试辅助 Appender,直到一个成功或没有更多辅助 Appender 可以尝试。

FileAppender

写入 fileName 参数中命名的 File。

CsvParameterLayout

将事件的参数转换为 CSV 记录,忽略该消息。

JDBCAppender

使用标准 JDBC 将日志事件写入关系数据库表。

JPAAppender

使用 Java Persistence API 2.1 将日志事件写入关系数据库表。

HttpAppender

通过 HTTP 发送日志事件。必须提供 Layout 才能设置日志事件的格式。

KafkaAppender

将事件记录到 Apache Kafka 主题。每个日志事件都作为 Kafka 记录发送。

NoSQLAppender

将日志事件写入 NoSQL 数据库;MongoDB 和 Apache CouchDB 存在提供程序实现。

RoutingAppender

评估日志事件,然后将它们路由到从属 Appender。

SMTPAppender

在发生特定日志记录事件时发送电子邮件,通常是在错误或致命错误上。

JeroMQ

ZeroMQ appender 使用 JeroMQ 库将日志事件发送到一个或多个 ZeroMQ 终端节点。

RollingFileAppender

写入 fileName 参数中命名的 File,并根据 TriggeringPolicy 和 RolloverPolicy 滚动文件。

RewriteAppender

允许在另一个 Appender 处理日志事件之前对其进行操作。这可用于掩盖敏感信息(如密码)或将信息注入每个事件。

有关完整详细信息,请查看官方 Log4j 文档

          1. 日志模式

默认情况下,通过 log4j2.xml 文件提供的大多数 appender 都使用基于模式的布局来格式化日志消息。也可以使用以下替代布局:

布局

描述

CsvParameterLayout

将事件的参数转换为 CSV 记录,忽略该消息。

GelfLayout

以 Graylog 扩展日志格式 (GELF 对事件进行布局。

HTMLLayout

生成 HTML 页面并将每个 LogEvent 添加到表中的一行

JSONLayout

以格式正确或碎片化的 JSON 创建日志事件。

PatternLayout

甚至根据转换模式设置日志格式。

RFC5424Layout

根据增强的 Syslog 规范 RFC 5424 设置日志事件的格式。

SerializedLayout

日志事件被转换为在 JMS 或套接字连接中有用的字节数组。

SyslogLayout

将日志事件格式化为 BSD Syslog 记录。

XMLLayout

以格式正确或碎片化的 XML 创建日志事件。

YamlLayout

在 YAML 中创建日志事件。

要了解有关每个选项的细微差别和配置设置的更多信息,请参阅官方 Log4J 指南。

        1. 日志文件轮换

默认配置指定在启动时、大小或特定时间滚动更新日志的触发策略。这些策略适用于 RollingFile appender。

例如,以下 XML 片段定义了在 JVM 启动时、日志大小达到 10 MB 以及当前日期不再与日志的开始日期匹配时滚动更新日志的策略。

1

2

3

4

5

6

7

8

9

10

<RollingFile name="file" fileName="${baseDir}/cas.log" append="true"

             filePattern="${baseDir}/cas-%d{yyyy-MM-dd-HH}-%i.log.gz">

    ...

    <Policies>

        <OnStartupTriggeringPolicy />

        <SizeBasedTriggeringPolicy size="10 MB"/>

        <TimeBasedTriggeringPolicy interval="24" />

    </Policies>

    ...</RollingFile>

触发策略确定是否应执行展期更新,并且还可以设计展期策略以指示应如何执行展期更新。如果未配置策略,则将使用默认策略。

要查找更多全面的文档,请在此处查看指南。

          1. 展期策略

自定义滚动更新策略提供了一个删除操作,与使用 DefaultRolloverStrategy max 属性相比,它使用户能够更好地控制在滚动更新时删除的文件。delete 操作允许用户配置一个或多个条件,以选择要相对于基目录删除的文件。

例如,以下 appender 在滚动更新时删除基目录下与 */*.log glob 匹配且存在时间不超过 7 天的所有文件。

1

2

3

4

5

6

7

8

9

10

11

<RollingFile name="file" fileName="${baseDir}/cas.log" append="true"

             filePattern="${baseDir}/cas-%d{yyyy-MM-dd-HH}-%i.log.gz">

    ...

    <DefaultRolloverStrategy max="5" compressionLevel="9">

        <Delete basePath="${baseDir}" maxDepth="2">

            <IfFileName glob="*/*.log.gz" />

            <IfLastModified age="7d" />

        </Delete>

    </DefaultRolloverStrategy>

    ...</RollingFile>

要查找更多全面的文档,请在此处查看指南。

        1. 日志数据清理

出于安全考虑,默认情况下,CAS 将尝试从所有日志数据中删除票证授予票证和代理授予票证 ID。这当然包括由日志记录框架路由到日志目标的消息以及所有审计消息。

示例如下:

1

2

3

4

5

6

7

WHO: audit:unknown

WHAT: TGT-******************123456-cas01.example.org

ACTION: TICKET_GRANTING_TICKET_DESTROYED

APPLICATION: CAS

WHEN: Sat Jul 12 04:10:35 PDT 2014

CLIENT IP ADDRESS: ...

SERVER IP ADDRESS: ...

票证 ID 的尾端会保留一定数量的字符,以帮助进行故障排除和诊断。

        1. 日志消息摘要

默认情况下,会汇总记录的堆栈跟踪,并且输出中仅显示堆栈跟踪的前几行以减少干扰。如果您希望查看完整的堆栈跟踪并禁用摘要模式,您可以考虑将相应包的日志级别更改为 DEBUG可以通过你的LogMessageSummarizer实现来替换和自定义此行为,该实现应使用 Java ServiceLoader API 向 CAS 注册。为此,您至少需要创建一个 src/main/resources/META-INF/services/org.apereo.cas.util.LogMessageSummarizer 文件,其中包含以下内容:

1

org.sso.example.MyLogMessageSummarizer

如果需要完全禁用摘要模式,则应在上述文件中改用以下内容:

1

org.apereo.cas.util.logging.DisabledLogMessageSummarizer

      1. Fluentd
        1. Fluentd 日志记录

Fluentd 是用于统一日志记录层的开源数据收集器。Fluentd 允许您统一数据收集和使用,以便更好地使用和理解数据。

CAS 日志数据可以自动路由到 Fluentd。通过在覆盖中包含以下模块来启用支持:

Apache Maven

Gradle

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-logging-config-fluentd"}

使用上面的模块,您可以声明一个特定的 appender 来与 AWS CloudWatch 通信:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

<Configuration packages="io.github.technologize">

    <Appenders>

        <Fluentd name="fluentd" tag="yourTag" >

        <!--

          all fields are optional, fields name will be sent to fulentd as a key in json

          Field value/pattern can follow the Pattern as specified in PatternLayout  

          Refer: https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout

        -->

            <Field name="application">CAS</Field>

            <Field name="someOtherField">Otherfield %X{traceId}</Field>

            <Field name="lookupField" pattern="%N"/>   

        <!--

          all settings are optional, see FluencyBuilderForFluentd; for default values

          you can add as may fields as you like (or none at all)

        -->

            <FluentdConfig

              maxBufferSize="536870912"

              bufferChunkInitialSize="1048576"

              bufferChunkRetentionSize="4194304"

              bufferChunkRetentionTimeMillis="1000"

              flushAttemptIntervalMillis="600"

              waitUntilBufferFlushed="10"

              waitUntilFlusherTerminated="10"

              senderMaxRetryCount="8"

              senderBaseRetryIntervalMillis="400"

              senderMaxRetryIntervalMillis="30000"

              connectionTimeoutMillis="5000"

              readTimeoutMillis="5000"

              ackResponseMode="true"

              sslEnabled="false"

              jvmHeapBufferMode="true"

              fileBackupDir="true">

              <!--

              all Servers are optional, locahost:24224 will be used if none are specified

              If multiple servers are specified,

                message will be sent to only one of them dependeing on availability

              -->

              <Server host="localhost" port="24224" />

              <Server host="127.0.0.1" port="24224" />    

            </FluentdConfig>

        </Fluentd>

    </Appenders>

    

    <Loggers>

        <Logger name="org.apereo" additivity="true" level="trace">

            <appender-ref ref="fluentd" />

        </Logger>

    </Loggers></Configuration>

      1. CloudWatch
        1. CloudWatch 日志记录

日志数据可以自动路由到 AWS CloudWatch。通过在覆盖中包含以下模块来启用支持:

Apache Maven

Gradle

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-aws-cloudwatch"}

使用上面的模块,您可以声明一个特定的 appender 来与 AWS CloudWatch 通信:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<CloudWatchAppender name="cloudWatch"

                    awsLogGroupName="LogGroupName"

                    awsLogStreamName="LogStreamName"

                    awsLogRegionName="us-west-1"

                    credentialAccessKey="..."

                    credentialSecretKey="..."

                    awsLogStreamFlushPeriodInSeconds="5"

                    createIfNeeded="true"

                    createLogGroupIfNeeded="false"

                    createLogStreamIfNeeded="false">

    <PatternLayout>

        <Pattern>%5p | %d{ISO8601}{UTC} | %t | %C | %M:%L | %m %ex %n</Pattern>

    </PatternLayout></CloudWatchAppender>

...<Logger name="org.apereo" additivity="true" level="debug">

    <appender-ref ref="cloudWatch" /></Logger>

AWS 凭证会自动从以下来源获取,如果相关,并且可以通过 CAS 配置实现:

链接到 IAM 角色的 EC2 实例元数据。

包含 accessKey 和 secretKey 作为属性键的外部属性文件。

AWS 配置文件路径和配置文件名称。

包括 aws.accessKeyId、aws.secretKey 和 aws.sessionToken 的系统属性

环境变量,包括 AWS_ACCESS_KEY_ID、AWS_SECRET_KEY 和 AWS_SESSION_TOKEN。

Properties 文件指定为 awscredentials.properties,其中包含 accessKey 和 secretKey 作为属性键。

访问密钥和密钥的静态凭证由手头的配置(日志记录等)直接提供。

createIfNeeded、createLogGroupIfNeeded 和 createLogStreamIfNeeded 是可选的;createIfNeeded 将默认为true,而 createLogGroupIfNeeded 和 createLogStreamIfNeeded 默认为 false。任何 true 值都将优先(即,将 all 设置为 false 以不创建任何内容)。

        1. 执行器端点

CAS 提供以下端点:

  GET

/cas/actuator/cloudWatchLogs/stream 

从 AWS Cloud Watch 获取最后 X 个日志条目。

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

笔记

配置元数据

本节中列出的配置属性集合是从包含实际字段定义、类型、描述、模块等的 CAS 源和组件自动生成的。这些元数据可能并不总是 100% 准确,或者可能缺乏细节和足够的解释。

有选择性

本部分仅供参考。请勿将整个设置集合复制/粘贴到 CAS 配置中;而是只选择您需要的属性。除非您确定设置的用途,否则不要启用设置,并且不要将设置复制到您的配置中以保留它们作为参考。所有这些想法都会导致升级头痛、维护噩梦和过早衰老。

YAGNI

请注意,对于几乎所有用例,声明和配置此处列出的属性就足够了。您不必显式修改 CAS XML/Java/etc配置文件来设计身份验证处理程序、创建属性发布策略等。CAS 在运行时将自动为您配置所有必需的更改。如果您不确定给定 CAS 设置的含义,请不要犹豫不决地打开它。查看代码库,或者更好的是,提出问题以阐明预期行为。

命名约定

属性名称可以用非常宽松的术语来指定。例如 cas.someProperty、cas.some-property cas.some_property 都是有效名称。虽然 CAS 接受 allforms,但某些组件(在 CAS 和其他使用的框架中)在运行时的激活以属性值为条件,其中需要使用 kebab 大小写在 CAS 配置中指定此属性。这既适用于 CAS 拥有的属性,也适用于可能通过外部库或框架(如 Spring Boot 等)呈现给系统的属性。

 注意

如果可能,属性应以小写 kebab 格式存储,例如 cas.property-name=value。此规则唯一可能的例外是在命名 actuator endpoints 时;执行器端点的名称(即 ssoSessions)必须保持驼峰式命名法模式。

由 CAS 平台直接控制的设置和属性始终以前缀 cas.所有其他设置都通过其他底层框架进行控制并提供给 CAS,并且可能具有自己的架构和语法。请小心区分。无法识别的属性将被 CAS 和/或 CAS 所依赖的框架拒绝。这意味着,如果您以某种方式拼错了属性定义或未能遵守点表示法语法等,则 CAS 将完全拒绝您的设置,并且它可能控制的功能永远不会以您想要的方式激活。

验证

在 CAS 启动时自动验证配置属性,以报告配置绑定问题,尤其是在配置架构无法识别或验证定义的 CAS 设置时。其他验证过程也通过 Spring Boot 和系列在启动时自动应用的配置元数据和属性迁移来处理。

索引设置

能够接受多个值的 CAS 设置通常使用索引进行记录,例如 cas.some.setting[0]=value。索引 [0] 旨在由采用者递增,以允许不同的多个配置块。

      1. SQS
        1. AWS SQS 日志记录

日志数据可以自动路由到 AWS SQS。通过在覆盖中包含以下模块来启用支持:

Apache Maven

Gradle

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-logging-config-sqs"}

使用上述模块,您可以声明一个特定的 appender 来与 AWS SQS 通信:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<SQSAppender name="SQSAppender"

             region="us-west-1"

             credentialAccessKey="..."

             credentialSecretKey="..."

             queueName="CAS"

             endpoint="..."

             queueTags="tag1->value1,tag2->value2">

 <PatternLayout>

  <Pattern>%5p | %d{ISO8601}{UTC} | %t | %C | %M:%L | %m %ex %n</Pattern>

 </PatternLayout></SQSAppender>

...

<Logger name="org.apereo.cas" level="trace" additivity="false">

    <AppenderRef ref="SQSAppender"/></Logger>

endpoint设置是可选的。如果 queueName 指示的 SQS 队列不存在,则在初始化和启动 appender 时,CAS 将自动创建该队列。

AWS 凭证会自动从以下来源获取,如果相关,并且可以通过 CAS 配置实现:

链接到 IAM 角色的 EC2 实例元数据。

包含 accessKey 和 secretKey 作为属性键的外部属性文件。

AWS 配置文件路径和配置文件名称。

包括 aws.accessKeyId、aws.secretKey 和 aws.sessionToken 的系统属性

环境变量,包括 AWS_ACCESS_KEY_ID、AWS_SECRET_KEY 和 AWS_SESSION_TOKEN。

Properties 文件指定为 awscredentials.properties,其中包含 accessKey 和 secretKey 作为属性键。

访问密钥和密钥的静态凭证由手头的配置(日志记录等)直接提供。

      1. Loggly
        1. Loggly 配置

Loggly 是一种基于云的日志管理服务,可让您轻松访问和分析日志中的关键任务信息。日志数据可以通过 Rsyslog 自动路由到 Loggly。使用 Rsyslog 的优势在于,它可以在不阻止应用程序的情况下发送 TCP 事件,可以选择加密数据,甚至可以将数据排队以增加网络故障的稳健性。

有关更多信息,请参阅本指南。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

...<Appenders>

    <Socket name="Loggly" host="localhost" port="514" protocol="UDP">

        <PatternLayout>

        <pattern>${hostName} java %d{yyyy-MM-dd HH:mm:ss,SSS}{GMT} %p %t

            %c %M - %m%n</pattern>

        </PatternLayout>

    </Socket></Appenders>

...<Loggers>

    <Root level="INFO">

        <AppenderRef ref="Loggly" />

    </Root></Loggers>

      1. Google Cloud
        1. Google Cloud 日志

Cloud Logging 是 Google Cloud 提供的托管式日志记录服务。

此处的集成还提供了对将 Web 请求跟踪 ID 与相应日志条目关联的自动支持,方法是从 MDC 检索 X-B3-TraceId 或 X-Cloud-Trace-Context 标头值。

        1. JSON 布局模板

JsonTemplateLayout 是一种可自定义、高效且无垃圾的 JSON 生成布局。它根据提供的 JSON 模板描述的结构对 LogEvents 进行编码。

1

<JsonTemplateLayout eventTemplateUri="classpath:GcpLayout.json"/>

另一种选择是使用 CAS 提供的专用记录器。通过在 WAR 覆盖中包含以下依赖项来启用支持:

Apache Maven

Gradle

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-gcp-logging"}

 用法

由于日志记录的设置方式,将忽略 CAS 属性中定义的 Google Cloud 项目 ID 和凭据。相反,您应该在必要时将 GOOGLE_CLOUD_PROJECT 和 GOOGLE_APPLICATION_CREDENTIALS 环境变量设置为项目 ID 和 credentials 私钥位置。或者,也可以直接在日志记录配置中设置 Google Cloud 项目 ID。

以下是日志记录配置的示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

<Configuration packages="org.apereo.cas.logging">

    <Appenders>

        <Console name="Console" target="SYSTEM_OUT">

            <JsonLayout locationInfo="false"

                        includeStacktrace="true"

                        objectMessageAsJsonObject="true"

                        compact="true"

                        properties="false"

                        eventEol="true"

                        includeTimeMillis="false">

                <KeyValuePair key="time" value="$${event:timestamp:-}"/>

                <KeyValuePair key="timestampSeconds" value="$${ctx:timestampSeconds:-}"/>

                <KeyValuePair key="timestampNanos" value="$${ctx:timestampNanos:-}"/>

                <KeyValuePair key="severity" value="$${ctx:severity:-}"/>

                <KeyValuePair key="logging.googleapis.com/insertId" value="$${ctx:insertId:-}"/>

                <KeyValuePair key="logging.googleapis.com/spanId" value="$${ctx:spanId:-}"/>

                <KeyValuePair key="logging.googleapis.com/trace" value="$${ctx:traceId:-}"/>

            </JsonLayout>

        </Console>

        <!-- Update the projectId, or remove and let CAS determine the project id automatically -->

        <GoogleCloudAppender name="GoogleCloudAppender"

                             flattenMessage="true"

                             projectId="...">

            <AppenderRef ref="casConsole"/>

        </GoogleCloudAppender>

    </Appenders>

    <Loggers>

        <Logger name="org.apereo.cas" includeLocation="true"

                level="INFO" additivity="false">

            <AppenderRef ref="GoogleCloudAppender"/>

        </Logger>

    </Loggers>

</Configuration>

        1. 执行器端点

CAS 提供以下端点:

  GET

/cas/actuator/gcpLogs/stream 

从 GCP 获取最后 X 个日志条目。

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

必填

自选

笔记

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

Show  entries

搜索:

·  cas.logging.gcp.log-name=

它通常具有以下语法:projects/[PROJECT_ID]/logs/[LOG_ID]

 org.apereo.cas.configuration.model.support.aws.GoogleCloudLogsProperties.

如何配置此属性?

·  cas.logging.gcp.project-id=

项目 ID 是分配给 GCP 环境中特定项目的唯一标识符。项目 ID 在所有 GCP 项目中都是全局唯一的,这意味着任何两个项目都不能具有相同的项目 ID。项目 ID 用于各种 API 调用、配置和 URL,以唯一标识您的 CAS 项目。

 org.apereo.cas.configuration.model.support.aws.GoogleCloudLogsProperties.

如何配置此属性?

显示 1 到 2 的 2 个条目

上一页1下一页

      1. 弹性搜索
        1. 弹性搜索

JsonTemplateLayout 是一种可自定义、高效且无垃圾的 JSON 生成布局。它根据提供的 JSON 模板描述的结构对 LogEvent进行编码。

要根据 Elastic Common Schema (ECS) 规范格式化日志,可以使用以下配置:

1

2

3

4

5

6

7

8

...<Console name="console" target="SYSTEM_OUT">

    <JsonTemplateLayout eventTemplateUri="classpath:EcsLayout.json" /></Console><CasAppender name="casConsole">

    <AppenderRef ref="console" /></CasAppender>

...

生成的 JSON 应与以下内容匹配:

1

2

3

4

5

6

7

8

9

10

11

{

  "@timestamp": "2017-05-25T19:56:23.370Z",

  "ecs.version": "1.2.0",

  "log.level": "ERROR",

  "message": "Hello, error!",

  "process.thread.name": "main",

  "log.logger": "org.apache.logging.log4j.JsonTemplateLayoutDemo",

  "error.type": "java.lang.RuntimeException",

  "error.message": "test",

  "error.stack_trace": "java.lang.RuntimeException: ...\n"}

      1. Logstash
        1. Logstash 日志记录

CAS 日志记录框架能够将日志消息路由到 TCP/UDP 端点。此配置假定 Logstash 服务器已在端口 9500 上启用其 TCP 输入:

1

2

3

4

5

6

7

8

9

10

11

12

13

...<Appenders>

    <Socket name="socket" host="localhost" connectTimeoutMillis="3000"

            port="9500" protocol="TCP" ignoreExceptions="false">

      <SerializedLayout />

    </Socket></Appenders>

...<Logger name="org.apereo" additivity="true" level="debug">

    <appender-ref ref="cas" />

    <appender-ref ref="socket" /></Logger>

...

      1. MDC
        1. 映射的诊断上下文

为了对每个请求进行唯一标记,CAS 将 contextualinformation 放入 MDC(Mapped Diagnostic Context 的缩写)中。这有效地转换为许多可用于日志记录上下文的特殊变量,这些变量可能会传达有关请求或身份验证事件性质的其他信息。

变量

描述

remoteAddress

HTTP 请求的远程地址。

remoteUser

HTTP 请求的远程用户。

serverName

HTTP 请求的服务器名称。

serverPort

HTTP 请求的服务器端口。

locale

HTTP 请求的区域设置。

contentType

HTTP 请求的内容类型。

contextPath

HTTP 请求的上下文路径。

localAddress

HTTP 请求的本地地址。

localPort

HTTP 请求的本地端口。

remotePort

HTTP 请求的远程端口。

pathInfo

HTTP 请求的路径信息。

protocol

HTTP 请求的协议。

authType

HTTP 请求的身份验证类型。

method

Method 的请求。

queryString

HTTP 请求的查询字符串。

requestUri

HTTP 请求的请求 URI。

scheme

HTTP 请求的方案。

timezone

HTTP 请求的时区。

principal

CAS 身份验证的主体 ID。

requestId

为此请求生成的标识符。

此外,所有可用的请求属性、标头和参数都作为变量公开。

这些变量可能包括密码。如果您在 SysLog Appender 中设置includeMDC=true,这些详细信息(包括清除密码)将被发送到日志服务器。

上述变量可用于日志记录模式:

单独使用 %X 可包含所有变量。

使用 %X{key} 包含指定的变量。

1

2

3

<Console name="console" target="SYSTEM_OUT">

    <PatternLayout pattern="%X{locale} %d %p [%c] - <%m>%n"/></Console>

      1. Papertrail
        1. Papertrail 日志记录

Papertrail 是一种基于云的日志管理服务,提供聚合日志记录工具、灵活的系统组、团队范围的访问、长期存档、图表和分析导出、监控 webhook 等。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

...<Appenders>

    <Syslog name="Papertrail"

            host="<host>.papertrailapp.com"

            port="XXXXX"

            protocol="TCP" appName="MyApp" mdcId="mdc"

            facility="LOCAL0" enterpriseNumber="18060" newLine="true"

            format="RFC5424" ignoreExceptions="false" exceptionPattern="%throwable{full}">

    </Syslog></Appenders>

...<Loggers>

    <Root level="INFO">

        <AppenderRef ref="Papertrail" />

    </Root></Loggers>

      1. Sentry
        1. 概述

Sentry 允许您实时跟踪日志和错误。它提供对生产部署的见解以及用于重现和修复崩溃的信息。

此处的集成支持错误处理和向 Sentry 报告、通过 span 和事务进行性能监控以及 Sentry 日志记录支持。

        1. 配置

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

Apache Maven

Gradle

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-sentry"}

必须调整 Logging 配置文件以匹配以下内容:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<?xml version="1.0" encoding="UTF-8"?><Configuration status="warn" packages="org.apache.logging.log4j.core,io.sentry.log4j2">

    <Appenders>

        <Console name="Console" target="SYSTEM_OUT">

            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>

        </Console>

        <!-- Setting minimumBreadcrumbLevel modifies the default minimum level to add breadcrumbs from INFO to DEBUG  -->

        <!-- Setting minimumEventLevel the default minimum level to capture an event from ERROR to WARN  -->

        <Sentry name="Sentry"

                minimumBreadcrumbLevel="DEBUG"

                minimumEventLevel="WARN"

                dsn="..." />

    </Appenders>

    <Loggers>

        <Root level="INFO">

            <AppenderRef ref="Sentry"/>

            <AppenderRef ref="casConsole"/>

        </Root>

    </Loggers></Configuration>

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

第三方

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Third Party(第三方)。此标志表示配置设置不受 CAS 生态系统的控制、拥有或管理,并且会影响第三方库(如 Spring Boot 或 Spring Cloud to CAS)提供的功能。有关更多信息,您可能必须访问第三方来源以查找更多详细信息。

Show  entries

搜索:

·  sentry.attach-server-name=

 io.sentry.spring.boot.jakarta.SentryProperties.

如何配置此属性?

·  sentry.attach-stacktrace=

 io.sentry.spring.boot.jakarta.SentryProperties.

如何配置此属性?

·  sentry.attach-threads=

 io.sentry.spring.boot.jakarta.SentryProperties.

如何配置此属性?

·  sentry.backpressure-monitor=

 io.sentry.spring.boot.jakarta.SentryProperties.

如何配置此属性?

·  sentry.bundle-ids=

 io.sentry.spring.boot.jakarta.SentryProperties.

如何配置此属性?

显示 1 到 5 的 118 个条目

上一页12345...24下一页

痕迹导航保存在内存中(默认情况下为最后 100 条记录),并与事件一起发送。例如,默认情况下,如果使用 logger.info 或 logger.warn 记录 100 个条目,则不会向 Sentry 发送任何事件。如果随后使用 logger.error 进行记录,则会向 Sentry 发送一个事件,其中包含这 100 条信息或警告消息。为此,SentryAppender 需要接收所有日志条目,以决定将哪些内容保留为痕迹导航或作为事件发送。将 SentryAppender 日志级别配置设置为低于为 minimumBreadcrumbLevel 和 minimumEventLevel 设置的值,以便接收这些日志消息。

最后,您需要配置 DSN(客户端密钥)和可选的其他值,例如 environment 和 release。

您可以在 src/main/resources/sentry.properties 文件中执行此操作:

1

dsn=https://12345@12345.ingest.sentry.io/12345

或者在启动 CAS 时通过系统属性:

1

java -Dsentry.dsn=https://12345@12345.ingest.sentry.io/12345 ...

或者在启动 CAS 之前通过环境变量:

1

export SENTRY_DSN=https://12345@12345.ingest.sentry.io/12345

      1. SysLog
        1. SysLog 日志记录

CAS 日志记录框架确实能够将消息路由到 externalsyslog 实例。要配置它,你首先要配置SysLogAppender,然后指定哪些消息需要路由到这个实例:

1

2

3

4

5

6

7

8

9

10

11

12

13

...<Appenders>

    <Syslog name="SYSLOG" format="RFC5424" host="localhost" port="8514"

            protocol="TCP" appName="MyApp" includeMDC="true" mdcId="mdc"

            facility="LOCAL0" enterpriseNumber="18060" newLine="true"

            messageId="Audit" id="App"/></Appenders>

...<Logger name="org.apereo" additivity="true" level="debug">

    <appender-ref ref="cas" />

    <appender-ref ref="SYSLOG" /></Logger>

映射诊断上下文 (MDC) 可能包含密码。设置 includeMDC=true 会将明文密码作为变量发送到 SysLog。

您还可以通过 SSL 配置远程目标输出并指定相关的密钥库配置:

1

2

3

4

5

6

7

8

9

10

11

12

...

<Appenders>

    <TLSSyslog name="bsd" host="localhost" port="6514">

      <SSL>

        <KeyStore location="log4j2-keystore.jks" password="changeme"/>

        <TrustStore location="truststore.jks" password="changeme"/>

      </SSL>

    </TLSSyslog></Appenders>

...

      1. Splunk
        1. Splunk 日志记录

日志数据可以自动路由到 Splunk。通过在覆盖中包含以下模块来启用支持:

Apache Maven

Gradle

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-logging-config-splunk"}

您可能还需要在 CAS 覆盖中声明以下存储库,以便能够解析依赖项:

1

2

3

4

5

6

repositories {

    maven {

        mavenContent { releasesOnly() }

        url "https://splunk.jfrog.io/splunk/ext-releases-local"

    }}

使用上面的模块,您可以声明一个特定的 appender 来与 Splunk 通信。以下示例假设您在本地运行 Splunk Enterprise(IP 地址为 127.0.0.1),并在端口 15000 上配置了 TCP 输入。TCP 输入的端口号与 Splunk Enterprise 管理端口不同。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<Appenders>

   <Socket name="SocketAppender" host="127.0.0.1" port="15000">

      <PatternLayout pattern="%p: %m%n" charset="UTF-8"/>

   </Socket>

...

   <SplunkAppender name="SplunkAppender">

      <AppenderRef ref="SocketAppender" />

   </SplunkAppender></Appenders>

...<Loggers>

   <Logger name="org.apereo" level="debug">

      <AppenderRef ref="SplunkAppender"/>

   </Logger></Loggers>

当然,您需要在 Splunk Enterprise 中创建一个 TCP 输入,CAS 会将日志写入该输入。

      1. Logback
        1. Logback 日志记录

CAS 还支持 Logback 作为替代日志记录引擎。在高层次上,Logback 架构类似于 Log4j 的架构,其中通常在 logback.xml 文件中定义 Logger、Appender 和 Layout 组件。

请参阅 Logback 文档以了解更多信息。

        1. 配置

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

Apache Maven

Gradle

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-logback"}

您还必须确保从 WAR 覆盖中排除以下模块和依赖项:

1

2

3

4

5

6

7

8

9

10

configurations.all {

    exclude(group: "org.apache.logging.log4j", module: "log4j-api")

    exclude(group: "org.apache.logging.log4j", module: "log4j-jakarta-web")

    exclude(group: "org.apache.logging.log4j", module: "log4j-web")

    exclude(group: "org.apache.logging.log4j", module: "log4j-jcl")

    exclude(group: "org.apache.logging.log4j", module: "log4j-slf4j-impl")

    exclude(group: "org.apache.logging.log4j", module: "log4j-slf4j2-impl")

    

    exclude(group: "org.apereo.cas", module: "cas-server-core-logging")}

示例logback.xml文件如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<?xml version="1.0" encoding="UTF-8"?><configuration scan="true" scanPeriod="30 seconds">

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">

        <layout class="ch.qos.logback.classic.PatternLayout">

            <Pattern>%white(%d{yyyy-MM-dd HH:mm:ss}) %highlight(%-5level) %cyan(%logger{15}) - %msg%n</Pattern>

        </layout>

    </appender>

    <logger name="org.apereo.cas" level="info" additivity="false">

        <appender-ref ref="console" />

    </logger>

    <root level="info">

        <appender-ref ref="console" />

    </root></configuration>

 小心

使用 Logback 时,CAS 不会处理清理日志数据以删除敏感的票证 ID,例如票证授予票证或代理授予票证。虽然这可能会在未来版本中解决,但在与外部系统(如 Splunk 或 Syslog 等)共享日志数据之前,您应该格外小心地清理日志数据。

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

必填

自选

第三方

笔记

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

Show  entries

搜索:

·  cas.logging.cloudwatch.credential-access-key=

使用 AWS 提供的访问密钥进行身份验证。

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

 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties.

如何配置此属性?

·  cas.logging.cloudwatch.credential-secret-key=

使用 AWS 提供的密钥进行身份验证。

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

 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties.

如何配置此属性?

·  cas.logging.cloudwatch.endpoint=

AWS 自定义终端节点。

 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties.

如何配置此属性?

·  cas.logging.cloudwatch.log-group-name=

日志组是一个容器,用于组织和存储共享相同保留、监控和访问控制设置的日志流。每个日志组都可以有一个唯一的名称,您可以将其视为与特定应用程序、服务或环境相关的日志的逻辑分组。

 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties.

如何配置此属性?

·  cas.logging.cloudwatch.log-stream-name=

日志流是共享同一源的一系列日志事件。每个日志流都属于一个日志组,您可以在一个日志组中拥有多个日志流。日志流通常用于分隔来自同一应用程序或服务中不同来源的日志数据。

 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties.

如何配置此属性?

显示 1 到 5 的 8 个条目

上一页12下一页

    1. 审计
      1. 概述
        1. 审计

CAS 使用自己的 Inspektr 框架进行审计和统计。这个框架曾经是一个单独的项目,以前位于代码库之外,后来完全合并到 CAS 代码库中。Inspektr 组件允许对粗粒度的执行路径进行非侵入性审计和日志记录,例如,通过使用注释和 Spring 管理的 @Aspect 样式方面执行 Spring 管理的 bean 方法。

CAS 服务器自动配置所有相关的 Inspektr 组件。注入到 Inspektr 类的所有可用配置选项都可以通过相关的 CAS 属性提供给部署人员。请注意,CAS 的审计记录管理功能支持同时处理多个审计记录目标。换句话说,您可以选择同时将审计记录路由到数据库和 REST 终端节点以及任意数量的基于 Logger 的目标。

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

自选

笔记

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

Show  entries

搜索:

·  cas.audit.engine.abbreviation-length=100

尽可能按给定长度缩写审核日志中的字段和条目。这通常适用于在审核日志中捕获的长服务 URL。负值/零值将完全禁用缩写。

 org.apereo.cas.configuration.model.core.audit.AuditEngineProperties.

如何配置此属性?

·  cas.audit.engine.alternate-client-addr-header-name=X-Forwarded-For

如果应用程序位于负载均衡器后面,则客户端地址通常最终是负载均衡器地址本身。此处标头的一个常见示例是 X-Forwarded-For,用于从请求中收集客户端地址,前提是负载均衡器已正确配置为传递该标头。

 org.apereo.cas.configuration.model.core.audit.AuditEngineProperties.

如何配置此属性?

·  cas.audit.engine.alternate-server-addr-header-name=

要使用的请求标头标识服务器地址。

 org.apereo.cas.configuration.model.core.audit.AuditEngineProperties.

如何配置此属性?

·  cas.audit.engine.audit-format=DEFAULT

要在日志中使用的审计格式。可用值如下:

DEFAULT:默认审计格式。

JSON在必要/可能的情况下,将审核日志输出为 JSON 字符串。

 org.apereo.cas.configuration.model.core.audit.AuditEngineProperties.

如何配置此属性?

·  cas.audit.engine.enabled=true

是否应启用审核功能。

 org.apereo.cas.configuration.model.core.audit.AuditEngineProperties.

如何配置此属性?

显示 1 到 5 的 12 个条目

上一页123下一页

        1. 执行器端点

CAS 提供以下端点:

  GET

/cas/actuator/auditLog 

提供审核日志的报告。除 'interval' 之外,每个过滤器都可以接受要匹配的正则表达式。

  GET

/cas/actuator/auditevents 

        1. 存储

可以通过以下策略管理审计。

存储

描述

文件系统

请参阅本指南。

JPA

请参阅本指南。

MongoDb 数据库

请参阅本指南。

Redis

请参阅本指南。

DynamoDb

请参阅本指南。

REST

请参阅本指南。

自定义

请参阅本指南。

        1. 审计事件

在审核日志中跟踪和记录以下事件:

Show  entries

搜索:

名字

ACCOUNT_REGISTRATION

AUP_SUBMIT

AUP_VERIFY

AUTHENTICATION

AUTHENTICATION_EVENT

显示 1 到 5 的 38 个条目

上一页12345...8下一页

      1. 文件
        1. 基于文件的审计

基于文件的审核日志显示在 Logging 配置中定义的 cas_audit.log 文件中。

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

自选

笔记

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

Show  entries

搜索:

·  cas.audit.slf4j.auditable-fields=who,what,when,action,client_ip,server_ip,geo_location

控制和定义审计日志可以接受的字段。接受的值为:

who

what

action

application

when

user_agent

client_ip

server_ip

geo_location

headers

 org.apereo.cas.configuration.model.core.audit.AuditSlf4jLogProperties.

如何配置此属性?

·  cas.audit.slf4j.enabled=true

确定是否应启用 Slf4j 审计。

 org.apereo.cas.configuration.model.core.audit.AuditSlf4jLogProperties.

如何配置此属性?

·  cas.audit.slf4j.singleline-separator=|

如果使用单行审计,则用于分隔审计字段的字符。

 org.apereo.cas.configuration.model.core.audit.AuditSlf4jLogProperties.

如何配置此属性?

·  cas.audit.slf4j.use-single-line=false

默认情况下,审核日志分为多行,其中每个操作和活动占据一整行。这是一个更紧凑的版本。

 org.apereo.cas.configuration.model.core.audit.AuditSlf4jLogProperties.

如何配置此属性?

显示 1 到 4 的 4 个条目

上一页1下一页

        1. 示例日志输出

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

WHO: org.apereo.cas.support.oauth.authentication.principal.OAuthCredentials@6cd7c975

WHAT: supplied credentials: org.apereo.cas.support.oauth.authentication.principal.OAuthCredentials@6cd7c975

ACTION: AUTHENTICATION_SUCCESS

APPLICATION: CAS

WHEN: Mon Aug 26 12:35:59 IST 2013

CLIENT IP ADDRESS: 172.16.5.181

SERVER IP ADDRESS: 192.168.200.22

WHO: org.apereo.cas.support.oauth.authentication.principal.OAuthCredentials@6cd7c975

WHAT: TGT-9-qj2jZKQUmu1gQvXNf7tXQOJPOtROvOuvYAxybhZiVrdZ6pCUwW-cas01.example.org

ACTION: TICKET_GRANTING_TICKET_CREATED

APPLICATION: CAS

WHEN: Mon Aug 26 12:35:59 IST 2013

CLIENT IP ADDRESS: 172.16.5.181

SERVER IP ADDRESS: 192.168.200.22

      1. JDBC
        1. 数据库审计

如果您打算使用数据库来实现审计功能,请在您的配置中启用以下模块:

Apache Maven

Gradle

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-audit-jdbc"}

要了解如何配置数据库驱动程序,请查看本指南。

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

必填

自选

Hibernate 和 JDBC

笔记

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

Show  entries

搜索:

·  cas.audit.jdbc.driver-class=org.hsqldb.jdbcDriver

用于连接到数据库的 JDBC 驱动程序。

 org.apereo.cas.configuration.model.core.audit.AuditJdbcProperties.

如何配置此属性?

·  cas.audit.jdbc.password=

数据库连接密码。

 org.apereo.cas.configuration.model.core.audit.AuditJdbcProperties.

如何配置此属性?

·  cas.audit.jdbc.url=jdbc:hsqldb:mem:cas-hsql-database

数据库连接 URL。

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

 org.apereo.cas.configuration.model.core.audit.AuditJdbcProperties.

如何配置此属性?

·  cas.audit.jdbc.user=sa

数据库用户必须具有足够的权限,才能在需要时处理架构更改和更新。

 org.apereo.cas.configuration.model.core.audit.AuditJdbcProperties.

如何配置此属性?

显示 1 到 4 的 4 个条目

上一页1下一页

        1. 数据库架构

表架构大致应与以下结构匹配:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

CREATE TABLE COM_AUDIT_TRAIL(

    AUD_USER      VARCHAR2(100)  NOT NULL,

    AUD_CLIENT_IP VARCHAR(15)    NOT NULL,

    AUD_SERVER_IP VARCHAR(15)    NOT NULL,

    AUD_RESOURCE  VARCHAR2(1024) NOT NULL,

    AUD_ACTION    VARCHAR2(100)  NOT NULL,

    APPLIC_CD     VARCHAR2(5)    NOT NULL,

    AUD_DATE      TIMESTAMP      NOT NULL,

    AUD_GEOLOCATION   VARCHAR2(100)   NOT NULL,

    AUD_USERAGENT     VARCHAR2(100)   NOT NULL,

    AUD_LOCALE        VARCHAR2(10)    NOT NULL,

    AUD_HEADERS       TEXT   NOT NULL,

    AUD_EXTRA_INFO    TEXT   NOT NULL)

      1. Groovy 
        1. Groovy Audits

基于 Groovy 的审计能够接收和处理可审计的上下文参数,并以任何文本格式或表示形式构建最终的可审计记录。然后,最终的可审计记录将传递到日志记录框架,通常标记为 INFO。

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

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

必填

Groovy 脚本

笔记

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

Show  entries

搜索:

·  cas.audit.groovy.template.location=

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

 org.apereo.cas.configuration.model.SpringResourceProperties.

如何配置此属性?

显示 1 到 1 的 1 个条目

上一页1下一页

        1. 脚本

以下参数将传递给脚本:

参数

描述

applicationContext

表示 Spring 应用程序上下文的对象。

logger

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

clientIpAddress

明显。

serverIpAddress

明显。

what

明显。

who

明显。

when

明显。

action

明显。

userAgent

明显。

application

明显。

geoLocation

明显。

HTTP 请求标头

所有收集的标头都按其名称传递。

额外信息

审计引擎从各种组件中收集的任意键/名称。

示例脚本如下:

1

2

3

${logger.info("Hello, World")}

who: ${who}, what: ${what}, when: ${when}, ip: ${clientIpAddress}, trace: ${customHttpRequestHeader}

      1. DynamoDb 
        1. DynamoDb 审核

如果您打算将 DynamoDb 数据库用于审核功能,请在配置中启用以下模块:

Apache Maven

Gradle

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-audit-dynamodb"}

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

必填

自选

笔记

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

Show  entries

搜索:

·  cas.audit.dynamo-db.credential-access-key=

使用 AWS 提供的访问密钥进行身份验证。

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

 org.apereo.cas.configuration.model.support.dynamodb.AuditDynamoDbProperties.

如何配置此属性?

·  cas.audit.dynamo-db.credential-secret-key=

使用 AWS 提供的密钥进行身份验证。

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

 org.apereo.cas.configuration.model.support.dynamodb.AuditDynamoDbProperties.

如何配置此属性?

·  cas.audit.dynamo-db.dax.url=

Cluster url 的 URL 中。例如,dax://my-cluster.l6fzcv.dax-clusters.us-east-1.amazonaws.com。

 org.apereo.cas.configuration.model.support.dynamodb.DynamoDbDaxProperties.

如何配置此属性?

·  cas.audit.dynamo-db.endpoint=

AWS 自定义终端节点。

 org.apereo.cas.configuration.model.support.dynamodb.AuditDynamoDbProperties.

如何配置此属性?

·  cas.audit.dynamo-db.region=

使用的 AWS 区域。

 org.apereo.cas.configuration.model.support.dynamodb.AuditDynamoDbProperties.

如何配置此属性?

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

上一页1下一页

      1. MongoDb 
        1. MongoDb 审计

如果您打算使用 MongoDb 数据库进行审计功能,请在您的配置中启用以下模块:

Apache Maven

Gradle

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-audit-mongo"}

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

必填

自选

笔记

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

Show  entries

搜索:

·  cas.audit.mongo.client-uri=

mongodb 实例的连接 URI。这通常采用 mongodb://user:psw@ds135522.somewhere.com:35522/db 的形式。如果未指定,将回退到其他单个设置。如果指定,则接管所有其他设置(如果适用)。

 org.apereo.cas.configuration.model.core.audit.AuditMongoDbProperties.

如何配置此属性?

·  cas.audit.mongo.collection=

要获取和/或创建的 MongoDb 数据库集合名称。

 org.apereo.cas.configuration.model.core.audit.AuditMongoDbProperties.

如何配置此属性?

·  cas.audit.mongo.database-name=

MongoDb 数据库实例名称。

 org.apereo.cas.configuration.model.core.audit.AuditMongoDbProperties.

如何配置此属性?

·  cas.audit.mongo.host=localhost

用于身份验证的 MongoDb 数据库主机。可以定义多个主机地址,用逗号分隔。如果定义了多个主机,则假定每个主机也包含端口(如果有)。否则,配置可能会回退到定义的端口。

 org.apereo.cas.configuration.model.core.audit.AuditMongoDbProperties.

如何配置此属性?

·  cas.audit.mongo.password=

用于身份验证的 MongoDb 数据库密码。

 org.apereo.cas.configuration.model.core.audit.AuditMongoDbProperties.

如何配置此属性?

显示 1 到 5 的 7 个条目

上一页12下一页

      1. Redis
        1. Redis 审计

如果您打算使用 Redis 数据库来实现审计功能,请在配置中启用以下模块:

Apache Maven

Gradle

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-audit-redis"}

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

必填

自选

笔记

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

Show  entries

搜索:

·  cas.audit.redis.cluster.nodes[0].host=

服务器的主机地址。

 org.apereo.cas.configuration.model.support.redis.RedisClusterNodeProperties.

如何配置此属性?

·  cas.audit.redis.cluster.nodes[0].port=

服务器的端口号。

 org.apereo.cas.configuration.model.support.redis.RedisClusterNodeProperties.

如何配置此属性?

·  cas.audit.redis.cluster.nodes[0].replica-of=

设置 master 节点的 id。

 org.apereo.cas.configuration.model.support.redis.RedisClusterNodeProperties.

如何配置此属性?

·  cas.audit.redis.cluster.nodes[0].type=

指示此节点的类型/角色。接受的值为 MASTER, REPLICA 。

 org.apereo.cas.configuration.model.support.redis.RedisClusterNodeProperties.

如何配置此属性?

·  cas.audit.redis.cluster.password=

集群连接的密码。

 org.apereo.cas.configuration.model.support.redis.RedisClusterProperties.

如何配置此属性?

显示 1 到 5 个条目,共 14 个条目

上一页123下一页

      1. REST
        1. REST 审计

审计事件也可以 POST到您选择的终端节点。要激活此功能,请在您的配置中启用以下模块:

Apache Maven

Gradle

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-audit-rest"}

HTTP 请求的正文是审计记录的 JSON 表示形式。

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

必填

自选

笔记

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

Show  entries

搜索:

·  cas.audit.rest.url=

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

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

 org.apereo.cas.configuration.model.core.audit.AuditRestProperties.

如何配置此属性?

显示 1 到 1 的 1 个条目

上一页1下一页

      1. 自定义
        1. 自定义审核

如果您希望创建自己的 auditor 实现,则需要设计一个 AuditTrailManager 组件并将其注册到 CAS:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

@Beanpublic AuditTrailExecutionPlanConfigurer myAuditConfigurer() {

    return plan -> {

        var mgr = new MyAuditTrailManager();

        plan.registerAuditTrailManager(mgr);

        

        /*

            Optionally, define your own action/resource resolvers

            for Spring beans with execution points that are tagged with @Audit annotation.

            

            plan.registerAuditActionResolver("MyAction", new MyAuditActionResolver());

            plan.registerAuditResourceResolver("MyResource", new MyAuditResourceResolver());

        */

    };}

审计记录通常使用客户端和服务器 IP 地址进行标记和记录。如果需要覆盖 defaultbehavior 并根据自定义逻辑提取 IP 地址,则需要设计一个 ClientInfoResolver 组件并将其注册到 CAS:

1

2

3

4

@Beanpublic ClientInfoResolver casAuditClientInfoResolver() {

    return new MyClientInfoResolver();}

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatisplus-IService

文章目录 简介IService如何继承基础业务完成复杂业务逻辑更简便的Lambda方法批处理 简介 IService类似于我们的BaseMapper吧 现在就是Service层的那些简单的CRUD也不用写了 下面是方法图 IService如何继承 不同于Mapper可以直接基础BaseMapper接口不用实现 我们的serviceIm…

一键安装教程

Maven 安装 右键 以管理员身份运行点击 下一步安装完成后会同步配置环境变量打开 cmd, 输入 mvn 查看mvn版本修改 maven 本地仓库地址 见图三, 本地新建文件夹&#xff0c;修改为你本地文件夹地址 Redis 安装 右键 以管理员身份运行点击 下一步会安装到选择的文件夹下 JAVA\R…

5分钟掌握LM Studio本地部署DeepSeek R1

文章目录 LM Studio安装与配置修改模型下载源下载DeepSeek R1模型模型选择配置模型部署API服务常见问题解决总结LM Studio安装与配置 下载地址:https://lmstudio.ai/ LM Studio 是一款专为开发者设计的轻量级集成开发环境(IDE),支持多种编程语言及框架,提供智能代码补全…

(前端基础)HTML(一)

前提 W3C:World Wide Web Consortium&#xff08;万维网联盟&#xff09; Web技术领域最权威和具有影响力的国际中立性技术标准机构 其中标准包括&#xff1a;机构化标准语言&#xff08;HTML、XML&#xff09; 表现标准语言&#xff08;CSS&#xff09; 行为标准&#xf…

Beszel监控Docker安装

一、Beszel Hub安装 #Beszel Hub安装 mkdir -p ./beszel_data && \ docker run -d \--name beszel \--restartunless-stopped \-v ./beszel_data:/beszel_data \-p 8090:8090 \henrygd/beszel#创建账号 账号/密码&#xff1a;adminadmin.com/adminadmin.com 二、Besz…

flutter image_cropper插件安装后 打包apk 报错命名空间问题

本篇文章主要讲解&#xff0c;Flutter安装完新依赖打包apk报错 A problem occurred configuring project ‘:image_cropper’. 命名空间问题的解决办法及原因说明。 日期&#xff1a;2025年2月15日 作者&#xff1a;任聪聪 一、报错现象&#xff1a; 报文信息&#xff1a; FAI…

unity学习41:动画里的曲线curve参数 和 事件 events

目录 1 曲线 curve 1.1 生成和修改曲线 1.2 曲线命名 animator参数命名&#xff0c;关联起来 1.3 可以修改animator的参数&#xff0c;也可以获取animator的参数 1.4 用脚本获得曲线的参数数值&#xff0c;并打印出来 1.4.1 获得曲线的test1参数 1.4.2 代码 1.4.3 测…

JVM学习

JVM 1、JVM是一个跨语言的平台&#xff0c;与语言无关 2、java虚拟机规范&#xff1a;一流企业做标准&#xff0c;二流企业做品牌&#xff0c;三流企业做产品 JVM种类 Hotspot&#xff1a;Oracle 公司&#xff0c;有商业版和免费版 open jdk 内部包含免费版本hotspot虚拟机 Jr…

DeepSeek 助力 Vue 开发:打造丝滑的开关切换(Switch)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

141,【1】buuctf web [SUCTF 2019]EasyWeb

进入靶场 代码审计 <?php // 定义函数get_the_flag&#xff0c;功能是处理文件上传相关操作 function get_the_flag() {// 注释说明&#xff1a;webadmin会每隔20分钟删除用户上传的文件$userdir "upload/tmp_" . md5($_SERVER[REMOTE_ADDR]);// 检查用户目录…

基于STM32的智能鱼塘养殖监控系统

1. 引言 水产养殖业正朝着智能化、精细化方向发展&#xff0c;传统养殖模式存在水质监控滞后、投喂不精准等问题。本文设计了一款基于STM32的智能鱼塘养殖监控系统&#xff0c;通过实时监测水质参数、自动投喂与远程管理&#xff0c;实现科学养殖&#xff0c;提高产量与经济效…

mapbox V3 新特性,添加下雪效果

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;mapbox 从入门到精通 文章目录 一、&#x1f340;前言1.1 ☘️mapboxgl.Map 地图对象…

Large Language Model Distilling Medication Recommendation Model

摘要&#xff1a;药物推荐是智能医疗系统的一个重要方面&#xff0c;因为它涉及根据患者的特定健康需求开具最合适的药物。不幸的是&#xff0c;目前使用的许多复杂模型往往忽视医疗数据的细微语义&#xff0c;而仅仅严重依赖于标识信息。此外&#xff0c;这些模型在处理首次就…

高血压危险因素分析(项目分享)

高血压危险因素分析&#xff08;项目分享&#xff09; 高血压作为一种极为常见的慢性疾病&#xff0c;正严重威胁着大众健康。它的发病机制较为复杂&#xff0c;涉及多个方面的因素。 在一份临床采集的数据的基础上&#xff0c;我们通过数据分析手段深入观察一下 BMI&#xf…

基于STM32的智能垃圾分类回收系统

1. 引言 随着城市化进程加快&#xff0c;传统垃圾处理方式已无法满足环保需求。本文设计了一款基于STM32的智能垃圾分类回收系统&#xff0c;通过图像识别、重量检测与自动分拣技术&#xff0c;实现垃圾精准分类&#xff0c;提高回收效率&#xff0c;助力城市可持续发展。 2. …

二、深入剖析线程安全性问题与底层原理

1.什么是线程安全&#xff1f;线程安全会带来哪些底层问题&#xff1f; 2.分析保证线程安全的三个性质-原子性、可见性、有序性 3.多场景剖析未保证原子性带来的问题 package imooc.atomic;public class AtomicTest {public static void main(String[] args) throws Interrupte…

IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini)

IntelliJ IDEA 接入 AI 编程助手&#xff08;Copilot、DeepSeek、GPT-4o Mini&#xff09; &#x1f4ca; 引言 近年来&#xff0c;AI 编程助手已成为开发者的高效工具&#xff0c;它们可以加速代码编写、优化代码结构&#xff0c;并提供智能提示。本文介绍如何在 IntelliJ I…

积家(Jaeger-LeCoultre):“钟表界的钟表师“(中英双语)

积家&#xff08;Jaeger-LeCoultre&#xff09;&#xff1a;瑞士高级制表的隐形巨匠 在瑞士高级制表领域&#xff0c;积家&#xff08;Jaeger-LeCoultre&#xff0c;简称JLC&#xff09; 被誉为“钟表界的钟表师”&#xff0c;它不仅是世界顶级腕表品牌之一&#xff0c;还为许…

Jenkins 新建配置Pipeline任务 三

Jenkins 新建配置Pipeline任务 三 一. 登录 Jenkins 网页输入 http://localhost:8080 输入账号、密码登录 一个没有创建任务的空 Jenkins 二. 创建 任务 图 NewItem 界面左上角 New Item 图NewItemSelect 1.Enter an item name&#xff1a;输入任务名 2.Select an ite…

盛铂科技 SMF106 低相位噪声贴片式频率综合器模块

在现代通信和电子设备领域&#xff0c;频率综合器作为关键组件&#xff0c;其性能优劣直接影响系统的整体表现。盛铂科技的 SMF106 低相位噪声贴片式频率综合器&#xff0c;以其卓越的性能和独特设计&#xff0c;成为众多高性能系统的选择。 一、频率覆盖范围广&#xff0c;步进…