【发布时间】:2018-07-01 02:32:53
【问题描述】:
我想记录发出每个请求的用户名。 成功登录后,我使用这种方法将用户名设置为会话变量 - 用户名。
@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 进行会话持久化。 有什么建议为什么它不起作用?
【问题讨论】:
-
您不必设置会话变量。如果您正在登录并拥有 spring 安全上下文,那么您的 @AuthenticatedPrincipal 应该具有 UserDetails/Principal。在您的示例中,您的记录器是否将用户名正确打印到日志中?
-
记录器工作正常。问题是用户名在 Tomcat 日志文件中不可用.. :)
-
您是否在日志文件中看到“ - - ”?如果您正在设置 %{username}s 我不认为它默认为 - 如果它丢失。你能给我看一个日志输出的例子吗?