带有嵌入式tomcat的Spring Boot +带有身份验证用户的访问日志
Posted
技术标签:
【中文标题】带有嵌入式tomcat的Spring Boot +带有身份验证用户的访问日志【英文标题】:Spring boot with embedded tomcat + access log with authentication user 【发布时间】:2017-07-02 09:55:30 【问题描述】:我正在使用带有嵌入式 tomcat + spring security 的 spring boot。 我从tomcat的访问日志看起来是这样的
IP - - [14/Feb/2017:08:49:50 +0200] "GET /page/2 HTTP/1.1" 200 2606
那么,我怎样才能使日志文件看起来像
IP - - [14/Feb/2017:08:49:50 +0200] 用户名 - "GET /page/2 HTTP/1.1" 200 2606
每个请求都必须具有发出请求的用户名。对于安全认证,我使用带有数据库用户名和密码信息的 spring security。
【问题讨论】:
好问题,顺便说一句 【参考方案1】:您可能需要将应用程序属性中的access log pattern 更改为如下内容:
server.tomcat.accesslog.pattern=%h %l %t %u "%r" %s %b
其中%u
是已通过身份验证的远程用户(参见示例here)。
UPD:可能这还不够,因为 common 模式已经包含 %u
参数。在这种情况下,我会推荐两个额外的步骤:
-
将用户名放入请求会话参数中,例如:
request.getSession().setAttribute("username", user.getName());
在访问日志模式中添加以下参数:%usernames
server.tomcat.accesslog.pattern=%h %l %t %u %usernames "%r" %s %b
它应该从HttpSession
中获取名为username
的属性,因为它描述了here。
【讨论】:
如何使用此解决方案处理 STATELESS 会话策略?有什么想法吗? 如果添加到请求过滤器(前 jwt 验证器)中,上述方法似乎也适用于无状态。或者,您可以在请求中设置属性,如request.setAttribute("username", user.getName());
并使用 %usernamer
。以上是关于带有嵌入式tomcat的Spring Boot +带有身份验证用户的访问日志的主要内容,如果未能解决你的问题,请参考以下文章
带有嵌入式 Tomcat 的 Spring Boot 忽略了方法角色
使用带有嵌入式 Tomcat 的 Spring Boot Weblfux
如何在带有嵌入式 tomcat 的 Spring Boot App 中设置域名
带有嵌入式tomcat的Spring Boot应用程序,将访问日志发送到syslog