Spring boot 2.0 / Tomcat 8.5 - 日志文件中的Session属性

时间:2018-01-22 12:47:16

标签: session tomcat redis

我想记录每个请求的用户名。 成功登录后,我使用此方法将用户名设置为会话变量 - 用户名。

@Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
        String username = merchandiserRepository.findByUsername(authentication.getName()).getUsername();
        request.getSession(true).setAttribute("username", username);
        logger.warn("Successfully logged in: " + username);
        response.sendRedirect("/page/1");
    }

在我的Tomcat日志模式中是:

server.tomcat.accesslog.pattern=%h %l %{username}s %t "%r" %s %b %T %{User-Agent}i

%{username} s应该是用户名,但是显示" - " 我在 - https://tomcat.apache.org/tomcat-8.5-doc/config/valve.html

中看到了这个属性

我使用redis进行会话持久化。 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我想我明白你要完成的事情。我完成了同样的事情,方式略有不同。

尝试添加此依赖项:

    <dependency>
        <groupId>net.rakugakibox.spring.boot</groupId>
        <artifactId>logback-access-spring-boot-starter</artifactId>
        <version>2.5.0</version>
    </dependency>

这是我的logback-access.xml,我把它放到我的src / main / resources /

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <configuration debug="false" scan="false">
        <statusListener class="ch.qos.logback.core.status.NopStatusListener"/>
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="net.logstash.logback.encoder.LogstashAccessEncoder">
                <fieldNames>
                    <message>message</message>
                </fieldNames>
            </encoder>
        </appender>
        <appender-ref ref="CONSOLE"/>
    </configuration>

我不知道你问题的根本原因,但这可能是你想要完成的事情的解决方案。