我想记录用户在我的webservice上发出的请求。用户登录然后用户可以对服务器api做请求。我想记录哪个用户提出了哪个请求,输入和输出是什么等等。
让我们说用户编辑了一些东西,通过向服务器提交将要更新的新对象,我想知道是谁做的,之前是什么。
这是我目前使用的,但效果不是很好。
logging.level.org.thymeleaf=DEBUG
logging.level.org.springframework.boot=TRACE
我有一个想法是添加方法(....,字符串用户名),以便我可以记录所有内容。这是一个坚实的想法,还是有更好的方法来做到这一点?
答案 0 :(得分:0)
您可以通过启用此属性来使用正常访问日志记录(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过滤器链之后执行此过滤器,则可以访问用户主体。您还拥有HttpServletRequest
和HttpServletResponse
个对象,这些对象将允许您记录请求正文和响应正文,但我认为这将是一个非常昂贵的操作。
request.getServletPath()
SecurityContextHolder.getContext().getAuthentication().getName()
。只需通过更改订单确保您的安全过滤器已经执行(有关详细信息,请查看this question)request.getReader()
并记录请求正文(有关详细信息,请查看this question)Writer
包装并覆盖HttpServletResponse
来检索响应正文,以便它返回您的编写器而不是默认编写器(有关详细信息,请查看this question })