使用Spring Security时,Tomcat访问日志中缺少用户(%u)

我在Apache Tomcat 8中运行了一个示例性Spring Security(Hello World)Web应用程序。我试图看到的是Tomcat access Logs中的用户信息,但看起来该信息不存在。访问日志条目的示例:

0:0:0:0:0:0:0:1 - - [06/Nov/2019:09:41:57 +0200] "GET / HTTP/1.1" 200 422
0:0:0:0:0:0:0:1 - - [06/Nov/2019:09:41:59 +0200] "GET /hello HTTP/1.1" 200 83

Tomcat server.xml中的访问日志配置为:

<Valve classname="org.apache.catalina.valves.accessLogValve" directory="logs"
           prefix="localhost_access_log" suffix=".txt"
           pattern="common" />

pattern="common"对应于here中描述的'%h%l%u%t“%r”%s%b'定义的通用日志格式。 Tomcat文档还指出:

  

%u-已验证(如果有)的远程用户,否则为'-'

是否应该应用其他配置以使用户在访问日志中可见?

cobol_12121 回答:使用Spring Security时,Tomcat访问日志中缺少用户(%u)

answered一样,它可能无法正常工作

  

Tomcat的访问日志阀不起作用,因为Tomcat不知道Spring Security,后者完全在您的应用程序中运行。

您可以使用过滤器:

  

最简单的选择是在Spring Security之后添加您自己的过滤器(例如,在web.xml中),然后转储所需的信息

其他解决方案suggested in Config9,您可能需要包含用户名作为会话属性

  

可能这还不够,因为通用模式已经包含%u参数。在这种情况下,我建议另外执行两个步骤:

     

1)将用户名放入请求会话参数中,例如:

request.getSession().addAttribute("username",user.getName());
     

2)在访问日志模式中添加以下参数:%{username} s

server.tomcat.accesslog.pattern=%h %l %t %u %{username}s "%r" %s %b
本文链接:https://www.f2er.com/3154118.html

大家都在问