tomcat - Tomcat 如何选择经过身份验证的远程用户

标签 tomcat spring-boot logback

如果我启用 tomcat 通过 logback 访问日志,如下所示

logback.access:
  enabled: true

compile group: 'net.rakugakibox.spring.boot', name: 'logback-access-spring-boot-starter', version: '2.5.0'

配置如下

<configuration>
    <property name="LOG_HOME" value="${LOG_FILE_LOCATION:-/var/log/RSP}/${HOST_NAME}}"/>
    <appender name="ACCESS" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_HOME}/reservation_access.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/reservation_access-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>5MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>%h %l %u [%{TraceId}i] %t "%r" %s %b %D</pattern>
        </encoder>
    </appender>
    <appender-ref ref="ACCESS" />

</configuration>

它工作正常,但我无法理解它是如何选择 %u,在 documentation 中它被称为 Remote user that was authenticated 所以 tomcat 如何知道谁是经过身份验证的用户或者任何人都可以提供如何生成这些访问日志的源代码。(我已经阅读了基础文章 what is Access Log Valve )

如果我使用如下所示的 spring boot 属性启用访问日志

server.tomcat.accesslog.pattern: '%h %l %u [%{TraceId}i] %t "%r" %s %b %D'
server.tomcat.accesslog.prefix: reservation_access
server.tomcat.accesslog.enabled: true
server.tomcat.accesslog.directory: /var/log/RSP/
server.tomcat.accesslog.suffix: .log

然后 %u 不工作了,

  • 那么这两个版本有什么区别呢?
  • 何时为每个请求打印访问日志,即在执行所有过滤器后或请求到达服务器后立即打印?

    谢谢

最佳答案

logback-access-spring-boot-starterHttpServletRequest#getRemoteUser() 中读取 %u 的值。

在 Spring 世界中,HttpServletRequest.remoteUser() 通常由 Spring Security 填充。

关于tomcat - Tomcat 如何选择经过身份验证的远程用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47535804/

相关文章:

slf4j - Logback 重复记录

eclipse - 在 Eclipse 中调试 Web 应用程序

java - 无法在 Eclipse 中设置 Tomcat 6 - "Could not load the Tomcat server configuration"错误

tomcat - 在与已升级到 TLS 1.1 的 API 对话的 Grails 前端应用程序上出现握手错误

java - Iterable<SearchCriteria> 不适用于参数

java - Jboss 和 Spring 中的 Logback 经典

eclipse - IllegalArgumentException : The servlets named [test] and [pack. HelloWorld] 都映射到不允许的 url 模式 [/another/path]

java - SSL 握手是否提供数据可靠性?

java - 所选方面不应使用 hibernate 搜索过滤自己的组

java - Logback JaninoEventEvaluator 将日志事件定向到特定的附加程序