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

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 运行时的更多信息。

相关文章:

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

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

Linux多版本管理工具介绍

一、update-alternatives工具 1. 简介 update-alternatives是Linux系统自带的一个用于管理多个版本命令的工具。它允许用户在不同的软件版本之间进行切换&#xff0c;而不需要手动修改环境变量或者链接文件。 2. 基本使用 查看已安装的alternatives 使用命令update-alterna…...

DeepSeek笔记(二):DeepSeek局域网访问

如果有多台电脑&#xff0c;可以通过远程访问&#xff0c;实现在局域网环境下多台电脑共享使用DeepSeek模型。在本笔记中&#xff0c;首先介绍设置局域网多台电脑访问DeepSeek-R1模型。 一、启动Ollama局域网访问 1.配置环境变量 此处本人的操作系统是Windows11&#xff0c;…...

摄像头畸变矫正

简单介绍 所谓畸变其实就是由摄像头引起的图片失真, 一般在广角摄像头表现明显, 原本平整的桌面通过镜头看像个球面, 直观的解释直线被拍成了曲线, 这让我想起来了一个表情包. 去畸变的办法 首先我们需要一个标准棋盘(印有特定的标定图案), 如图: 把它摊平放在桌子上, 然后用…...

EasyRTC:智能硬件适配,实现多端音视频互动新突破

一、智能硬件全面支持&#xff0c;轻松跨越平台障碍 EasyRTC 采用前沿的智能硬件适配技术&#xff0c;无缝对接 Windows、macOS、Linux、Android、iOS 等主流操作系统&#xff0c;并全面拥抱 WebRTC 标准。这一特性确保了“一次开发&#xff0c;多端运行”的便捷性&#xff0c…...

机器视觉--图像的运算(乘法)

一、引言 在图像处理领域&#xff0c;Halcon 是一款功能强大且广泛应用的机器视觉软件库。它提供了丰富的算子和工具&#xff0c;能够满足各种复杂的图像处理需求。图像的乘法运算作为其中一种基础操作&#xff0c;虽然不像一些边缘检测、形态学处理等操作那样被频繁提及&…...

蓝桥杯 Java B 组之哈希表应用(两数之和、重复元素判断)

Day 5&#xff1a;哈希表应用&#xff08;两数之和、重复元素判断&#xff09; 一、哈希表&#xff08;Hash Table&#xff09;基础 1. 什么是哈希表&#xff1f; 哈希表&#xff08;Hash Table&#xff09; 是一种键值对&#xff08;key-value&#xff09;存储的数据结构&…...

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

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

vue 接口传formdata

在Vue中&#xff0c;如果你需要向服务器发送FormData对象&#xff0c;通常是为了上传文件或者需要发送表单数据。FormData是一个非常有用的工具&#xff0c;因为它可以直接使用表单元素的值以及文件内容&#xff0c;并以一种浏览器兼容的方式来发送这些数据。下面是如何在Vue中…...

图像处理篇---基本OpenMV图像处理

文章目录 前言1. 灰度化&#xff08;Grayscale&#xff09;2. 二值化&#xff08;Thresholding&#xff09;3. 掩膜&#xff08;Mask&#xff09;4. 腐蚀&#xff08;Erosion&#xff09;5. 膨胀&#xff08;Dilation&#xff09;6. 缩放&#xff08;Scaling&#xff09;7. 旋转…...

DeepSeek预测25考研分数线

25考研分数马上要出了。 目前&#xff0c;多所大学已经陆续给出了分数查分时间&#xff0c;综合往年情况来看&#xff0c;每年的查分时间一般集中在2月底。 等待出成绩的日子&#xff0c;学子们的心情是万分焦急&#xff0c;小编用最近爆火的“活人感”十足的DeepSeek帮大家预…...

数据融合的经典模型:早期融合、中期融合与后期融合的对比

数据融合是处理多源数据时非常重要的技术&#xff0c;尤其是在多模态学习、传感器网络和智能系统中。它的目标是将来自不同来源、不同模态的数据进行有效结合&#xff0c;从而获得更准确、更全面的信息。在数据融合的过程中&#xff0c;不同的融合策略能够在性能、效率和应用场…...

Linux环境Docker使用代理推拉镜像

闲扯几句 不知不觉已经2月中了&#xff0c;1个半月忙得没写博客&#xff0c;这篇其实很早就想写了&#xff08;可追溯到Docker刚刚无法拉镜像的时候&#xff09;&#xff0c;由于工作和生活上的事比较多又在备考软考架构&#xff0c;拖了好久…… 简单记录下怎么做的&#xf…...

LabVIEW用CANopen的设备属性配置与心跳消息和PDO读取

本示例展示了如何通过SDO&#xff08;服务数据对象&#xff09;配置设备属性&#xff0c;以及如何读取从设备周期性发送的心跳消息和PDO&#xff08;进程数据对象&#xff09;消息。通过该示例&#xff0c;可以有效地进行设备配置并实现数据监控&#xff0c;适用于CANopen网络中…...

DeepSeek01-本地部署大模型

一、ollama简介&#xff1a; 什么是 Ollama&#xff1f; Ollama 是一个用于本地部署和管理大模型的工具。它提供了一个简单的命令行界面&#xff0c; 使得用户可以轻松地下载、运行和管理各种大模型。Ollama 支持多种模型格式&#xff0c; 并且可以与现有的深度学习框架&#x…...

python学opencv|读取图像(七十五)人脸识别:Fisherfaces算法和LBPH算法

【1】引言 前序学习进程中&#xff0c;已经掌握了使用Eigenfaces算法进行的人脸识别。相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;七十四&#xff09;人脸识别&#xff1a;EigenFaces算法-CSDN博客 在此基础上&#xff0c;学习剩余两种人脸识别算法&am…...

UMLS数据下载及访问

UMLS数据申请 这个直接在官网上申请即可&#xff0c;记得把地址填全&#xff0c;基本都会拿到lisence。 UMLS数据访问 UMLS的数据访问分为网页访问&#xff0c;API访问以及数据下载后的本地访问&#xff0c;网页访问&#xff0c;API访问按照官网的指示即可&#xff0c;这里主…...

UE_C++ —— Container TArray

目录 一&#xff0c;TArray 二&#xff0c;Creating and Filling an Array 三&#xff0c;Iteration 四&#xff0c;Sorting 五&#xff0c;Queries 六&#xff0c;Removal 七&#xff0c;Operators 八&#xff0c;Heap 九&#xff0c;Slack 十&#xff0c;Raw Memor…...

第435场周赛:奇偶频次间的最大差值 Ⅰ、K 次修改后的最大曼哈顿距离、使数组包含目标值倍数的最少增量、奇偶频次间的最大差值 Ⅱ

Q1、奇偶频次间的最大差值 Ⅰ 1、题目描述 给你一个由小写英文字母组成的字符串 s 。请你找出字符串中两个字符的出现频次之间的 最大 差值&#xff0c;这两个字符需要满足&#xff1a; 一个字符在字符串中出现 偶数次 。另一个字符在字符串中出现 奇数次 。 返回 最大 差值…...

模拟解决哈希表冲突

目录 解决哈希表冲突原理&#xff1a; 模拟解决哈希表冲突代码&#xff1a; 负载因子&#xff1a; 动态扩容&#xff1a; 总结&#xff1a; HashMap和HashSet的总结&#xff1a; 解决哈希表冲突原理&#xff1a; 黑色代表一个数组&#xff0c;当 出现哈希冲突时&#xff0…...

UIView 与 CALayer 的联系和区别

今天说一下UIView 与 CALayer 一、UIView 和 CALayer 的关系 在 iOS 开发中&#xff0c;UIView 是用户界面的基础&#xff0c;它负责处理用户交互和绘制内容&#xff0c;而 CALayer 是 UIView 内部用于显示内容的核心图层&#xff08;Layer&#xff09;。每个 UIView 内部都有…...

Android 10.0 移除wifi功能及相关菜单

介绍 客户的机器没有wifi功能&#xff0c;所以需要删除wifi相关的菜单&#xff0c;主要有设置-网络和互联网-WLAN,长按桌面设置弹出的WALN快捷方式&#xff0c;长按桌面-微件-设置-WLAN。 修改 Android10 上直接将config_show_wifi_settings改为false,这样wifi菜单的入口就隐…...

电力与能源杂志电力与能源杂志社电力与能源编辑部2024年第6期目录

研究与探索 含电动汽车虚拟电厂的优化调度策略综述 黄灿;曹晓满;邬楠; 643-645663 含换电站的虚拟电厂优化调度策略综述 张杰;曹晓满;邬楠;杨小龙; 646-649667 考虑虚拟负荷研判的V2G储能充电桩设计研究 徐颖;张伟阳;陈豪; 650-654 基于状态估计的电能质量监测…...

简站主题:简洁、实用、SEO友好、安全性高和后期易于维护的wordpress主题

简站主题以其简洁的设计风格、实用的功能、优化的SEO性能和高安全性而受到广泛好评。 简洁&#xff1a;简站主题采用扁平化设计风格&#xff0c;界面简洁明了&#xff0c;提供多种布局和颜色方案&#xff0c;适合各种类型的网站&#xff0c;如个人博客和企业网站。 实用&…...

Redis(高阶篇)03章——缓存双写一致性之更新策略探讨

一、反馈回来的面试题 一图你只要用缓存&#xff0c;就可能会涉及到redis缓存与数据库双存储双写&#xff0c;你只要是双写&#xff0c;就一定会有数据一致性的问题&#xff0c;那么你如何解决一致性的问题双写一致性&#xff0c;你先动缓存redis还是数据库mysql哪一个&#x…...

【Git】说说Git中开发测试的使用Git分支Git标签的使用场景

一、环境介绍 dev环境&#xff1a;开发环境&#xff0c;外部用户无法访问&#xff0c;开发人员使用&#xff0c;版本变动很大。test环境&#xff1a;测试环境&#xff0c;外部用户无法访问&#xff0c;专门给测试人员使用的&#xff0c;版本相对稳定。pre环境&#xff1a;灰度环…...

Spring Boot中使用Server-Sent Events (SSE) 实现实时数据推送教程

一、简介 Server-Sent Events (SSE) 是HTML5引入的一种轻量级的服务器向浏览器客户端单向推送实时数据的技术。在Spring Boot框架中&#xff0c;我们可以很容易地集成并利用SSE来实现实时通信。 二、依赖添加 在Spring Boot项目中&#xff0c;无需额外引入特定的依赖&#x…...

【Golang学习之旅】Go 语言微服务架构实践(gRPC、Kafka、Docker、K8s)

文章目录 1. 前言&#xff1a;为什么选择Go语言构建微服务架构1.1 微服务架构的兴趣与挑战1.2 为什么选择Go语言构建微服务架构 2. Go语言简介2.1 Go 语言的特点与应用2.2 Go 语言的生态系统 3. 微服务架构中的 gRPC 实践3.1 什么是 gRPC&#xff1f;3.2 gRPC 在 Go 语言中的实…...

数据结构:栈(Stack)及其实现

栈&#xff08;Stack&#xff09;是计算机科学中常用的一种数据结构&#xff0c;它遵循先进后出&#xff08;Last In, First Out&#xff0c;LIFO&#xff09;的原则。也就是说&#xff0c;栈中的元素只能从栈顶进行访问&#xff0c;最后放入栈中的元素最先被取出。栈在很多应用…...

DeepSeek在linux下的安装部署与应用测试

结合上一篇文章&#xff0c;本篇文章主要讲述在Redhat linux环境下如何部署和使用DeepSeek大模型&#xff0c;主要包括ollama的安装配置、大模型的加载和应用测试。关于Open WebUI在docker的安装部署&#xff0c;Open WebUI官网也提供了完整的docker部署说明&#xff0c;大家可…...

Next.js【详解】获取数据(访问接口)

Next.js 中分为 服务端组件 和 客户端组件&#xff0c;内置的获取数据各不相同 服务端组件 方式1 – 使用 fetch export default async function Page() {const data await fetch(https://api.vercel.app/blog)const posts await data.json()return (<ul>{posts.map((…...

pnpm, eslint, vue-router4, element-plus, pinia

利用 pnpm 创建 vue3 项目 pnpm 包管理器 - 创建项目 Eslint 配置代码风格(Eslint用于规范纠错&#xff0c;prettier用于美观&#xff09; 在 设置 中配置保存时自动修复 提交前做代码检查 husky是一个 git hooks工具&#xff08;git的钩子工具&#xff0c;可以在特定实际执行特…...

将jar安装到Maven本地仓库中

将jar安装到Maven本地仓库中 1. 使用 mvn install:install-file 命令模版示例 2.项目中添加依赖 将一个 .jar 文件安装到 Maven 本地仓库中是一个常见的操作&#xff0c;尤其是在你想要在本地测试一个尚未发布到中央仓库的库时。以下是如何将 .jar 文件安装到 Maven 本地仓库的…...

Spring 和 Spring MVC 的关系是什么?

Spring和Spring MVC的关系就像是“大家庭和家里的小书房”一样。 Spring是一个大家庭&#xff0c;提供了各种各样的功能和服务&#xff0c;比如管理Bean的生命周期、事务管理、安全性等&#xff0c;它是企业级应用开发的全方位解决方案。这个大家庭里有很多房间&#xff0c;每个…...

Ollama ModelFile(模型文件)

1. 什么是 Modelfile&#xff1f; Modelfile 是 Ollama 的配置文件&#xff0c;用于定义和自定义模型的行为。通过它&#xff0c;你可以&#xff1a; 基于现有模型&#xff08;如 llama2、mistral&#xff09;创建自定义版本 调整生成参数&#xff08;如温度、重复惩罚&#…...

基于python深度学习遥感影像地物分类与目标识别、分割实践技术应用

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…...

(蓝桥杯——10. 小郑做志愿者)洛斯里克城志愿者问题详解

题目背景 小郑是一名大学生,她决定通过做志愿者来增加自己的综合分。她的任务是帮助游客解决交通困难的问题。洛斯里克城是一个六朝古都,拥有 N 个区域和古老的地铁系统。地铁线路覆盖了树形结构上的某些路径,游客会询问两个区域是否可以通过某条地铁线路直达,以及有多少条…...

基于 Ollama 工具的 LLM 大语言模型如何部署,以 DeepSeek 14B 本地部署为例

简简单单 Online zuozuo :本心、输入输出、结果 文章目录 基于 Ollama 工具的 LLM 大语言模型如何部署,以 DeepSeek 14B 本地部署为例前言下载 Ollama实际部署所需的硬件要求设置 LLM 使用 GPU ,发挥 100% GPU 性能Ollama 大模型管理命令大模型的实际运行资源消耗基于 Ollam…...

大模型工具大比拼:SGLang、Ollama、VLLM、LLaMA.cpp 如何选择?

简介&#xff1a;在人工智能飞速发展的今天&#xff0c;大模型已经成为推动技术革新的核心力量。无论是智能客服、内容创作&#xff0c;还是科研辅助、代码生成&#xff0c;大模型的身影无处不在。然而&#xff0c;面对市场上琳琅满目的工具&#xff0c;如何挑选最适合自己的那…...

【05】密码学与隐私保护

5-1 零知识证明 零知识证明介绍 零知识证明的概念 设P&#xff08;Prover&#xff09;表示掌握某些信息&#xff0c;并希望证实这一事实的实体&#xff0c;V(Verifier&#xff09;是验证这一事实的实体。 零知识证明是指P试图使V相信某一个论断是正确的&#xff0c;但却不向…...

Flink SQL与Doris实时数仓Join实战教程(理论+实例保姆级教程)

目录 第一章:Regular Joins 深度解析 1.1 核心原理与适用场景 1.2 电商订单 - 商品实时关联案例 1.2.1 数据流设计 1.2.2 Doris 表设计优化 1.2.3 性能调优要点 第二章:Interval Joins 实战应用 2.1 时间区间关联原理 2.2 优惠券使用有效性验证 2.2.1 业务场景说明 …...

DeepSeek 助力 Vue 开发:打造丝滑的范围选择器(Range Picker)

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

68页PDF | 数据安全总体解决方案:从数据管理方法论到落地实践的全方位指南(附下载)

一、前言 这份报告旨在应对数字化转型过程中数据安全面临的挑战&#xff0c;并提供全面的管理与技术体系建设框架。报告首先分析了数字化社会的发展背景&#xff0c;强调了数据安全在国家安全层面的重要性&#xff0c;并指出数据安全风险的来源和防护措施。接着&#xff0c;报…...

【Github每日推荐】-- 2024 年项目汇总

1、AI 技术 项目简述OmniParser一款基于纯视觉的 GUI 智能体&#xff0c;能够准确识别界面上可交互图标以及理解截图中各元素语义&#xff0c;实现自动化界面交互场景&#xff0c;如自动化测试、自动化操作等。ChatTTS一款专门为对话场景设计的语音生成模型&#xff0c;主要用…...

【Spring详解一】Spring整体架构和环境搭建

一、Spring整体架构和环境搭建 1.1 Spring的整体架构 Spring框架是一个分层架构&#xff0c;包含一系列功能要素&#xff0c;被分为大约20个模块 Spring核心容器&#xff1a;包含Core、Bean、Context、Expression Language模块 Core &#xff1a;其他组件的基本核心&#xff…...

Spring Boot(8)深入理解 @Autowired 注解:使用场景与实战示例

搞个引言 在 Spring 框架的开发中&#xff0c;依赖注入&#xff08;Dependency Injection&#xff0c;简称 DI&#xff09;是它的一个核心特性&#xff0c;它能够让代码更加模块化、可测试&#xff0c;并且易于维护。而 Autowired 注解作为 Spring 实现依赖注入的关键工具&…...

Machine Learning:Optimization

文章目录 局部最小值与鞍点 (Local Minimum & Saddle Point)临界点及其种类判断临界值种类 批量与动量(Batch & Momentum)批量大小对梯度下降的影响动量法 自适应学习率AdaGradRMSPropAdam 学习率调度优化总结 局部最小值与鞍点 (Local Minimum & Saddle Point) 我…...

wordpress get_footer();与wp_footer();的区别的关系

在WordPress中&#xff0c;get_footer() 和 wp_footer() 是两个不同的函数&#xff0c;它们在主题开发中扮演着不同的角色&#xff0c;但都与页面的“页脚”部分有关。以下是它们的区别和关系&#xff1a; 1. get_footer() get_footer() 是一个用于加载页脚模板的函数。它的主…...

Windows Docker运行Implicit-SVSDF-Planner

Windows Docker运行GitHub - ZJU-FAST-Lab/Implicit-SVSDF-Planner: [SIGGRAPH 2024 & TOG] 1. 设置环境 我将项目git clone在D:/Github目录中。 下载ubuntu20.04 noetic镜像 docker pull osrf/ros:noetic-desktop-full-focal 启动容器&#xff0c;挂载主机的D:/Github文…...

设计模式14:职责链模式

系列总链接&#xff1a;《大话设计模式》学习记录_net 大话设计-CSDN博客 1.概述 职责链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为设计模式&#xff0c;它允许将请求沿着处理者链传递&#xff0c;直到有一个处理者能够处理该请求。这种模式通过…...