使用 Thymeleaf 在 Spring Boot 中记录 Activity 的最佳方法是啥?

Posted

技术标签:

【中文标题】使用 Thymeleaf 在 Spring Boot 中记录 Activity 的最佳方法是啥?【英文标题】:What is the best way to log Activity in Spring Boot with Thymeleaf?使用 Thymeleaf 在 Spring Boot 中记录 Activity 的最佳方法是什么? 【发布时间】:2017-04-27 07:51:43 【问题描述】:

我想记录用户在我的网络服务上提出的请求。用户登录然后用户可以对服务器 api 进行请求。我想记录哪个用户提出了哪个请求,输入和输出是什么等等。

假设用户编辑了一些东西,通过向服务器提交将被更新的新对象,我想知道是谁做的,之前是什么。

这是我目前使用的,但不是很有效。

logging.level.org.thymeleaf=DEBUG
logging.level.org.springframework.boot=TRACE

我的一个想法是添加方法(....,字符串用户名),这样我就可以记录所有内容。这是一个可靠的想法,还是有更好的方法来做到这一点?

【问题讨论】:

看看这个问题:***.com/questions/23325389/… -- 这是你想要的吗? 可能是这样,但还有其他选择吗? 我怎样才能用表单 [[$#httpServletRequest.remoteUser]] 发布这个尝试 th:value=*[[$#httpServletRequest.remoteUser]] 【参考方案1】:

您可以通过启用此属性来使用正常的访问日志记录 (Tomcat):

server.tomcat.access-log-enabled=true

这允许您记录AccessLogValve 文档中指定的任何内容。

您也可以编写自己的过滤器,例如:

@Component
@Ordered(Ordered.LOWEST_PRECEDENCE)
public class LogFilter extends OncePerRequestFilter 
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
        throws ServletException, IOException 
        // Log the info you need
        // ...
        filterChain.doFilter(request, response);
    

如果您确保在 Spring Security 过滤器链之后执行此过滤器,则您可以访问用户主体。您还拥有HttpServletRequestHttpServletResponse 对象,这将允许您同时记录请求正文和响应正文,尽管我认为这将是一项非常昂贵的操作。

可以使用request.getServletPath() 记录路径 用户名可以通过多种方式登录,例如SecurityContextHolder.getContext().getAuthentication().getName()。只需通过更改顺序确保您的安全过滤器已被执行(更多信息请查看this question) 可以通过获取request.getReader() 记录请求正文并将其记录下来(有关更多信息,请查看this question) 也可以通过创建您自己的 Writer 包装器并覆盖 HttpServletResponse 来检索响应正文,以便它返回您的作者而不是默认作者(有关更多信息,请查看 this question)

【讨论】:

以上是关于使用 Thymeleaf 在 Spring Boot 中记录 Activity 的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

spring boot中使用thymeleaf

Spring boot Thymeleaf 配置

Bootstrap 不能与 spring-boot 一起使用?

Thymeleaf模板引擎

spring-boo hello world程序

Spring Boot中使用thymeleaf