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

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

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

相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

SpringBoot3 快速启动框架

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

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

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

C++ Primer 返回值和return语句

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

【Java集合二】HashMap 详解

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

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

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

Flutter 常见布局模型

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

Java类与类的关系

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

神经网络的学习 求梯度

import sys, ossys.path.append(os.pardir) import numpy as npfrom common.functions import softmax, cross_entropy_error from common.gradient import numerical_gradient# simpleNet类 class simpleNet:def __init__(self):self.W np.random.rand(2, 3) # 随机形状为2*…

架构——Nginx功能、职责、原理、配置示例、应用场景

以下是关于 Nginx 的功能、职责、原理、配置示例、应用场景及其高性能原因的详细说明&#xff1a; 一、Nginx 的核心功能 1. 静态资源服务 功能&#xff1a;直接返回静态文件&#xff08;如 HTML、CSS、JS、图片、视频等&#xff09;。配置示例&#xff1a;server {listen 80…

如何在 Mac 上解决 Qt Creator 安装后应用程序无法找到的问题

在安装Qt时&#xff0c;遇到了一些问题&#xff0c;尤其是在Mac上安装Qt后&#xff0c;发现Qt Creator没有出现在应用程序中。通过一些搜索和操作&#xff0c;最终解决了问题。以下是详细的记录和解决方法。 1. 安装Qt后未显示Qt Creator 安装完成Qt后&#xff0c;启动应用程…

优选算法《位运算》

在本篇当中我们将会复习之前在C语言阶段学习的各种位运算&#xff0c;并且在复习当中将再补充一些在算法题当中没有进行总结的位运算的使用方法&#xff0c;再总结完常见的位运算使用方法之和接下来还是和之前的算法篇章一样通过几道算法题来对这些位运算的方法技巧进行巩固。在…