我想记录每个请求的用户名。 成功登录后,我使用此方法将用户名设置为会话变量 - 用户名。
@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进行会话持久化。 有什么建议吗?
答案 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>
我不知道你问题的根本原因,但这可能是你想要完成的事情的解决方案。