java—使用webflux,是否可以使用aop获取serverhttprequest以进行日志记录

brccelvz  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(1596)

以前,我的网关系统是使用spring boot创建的 spring-boot-starter-web && rest template (阻塞)。
现在我想改用webflux,因为它看起来更适合我的情况。性能参考
以前我使用aop来记录 HttpServletRequest 用一个 Filter && HttpServletRequestWrapper . 例如:

RequestAttributes ra = RequestContextHolder.getRequestAttributes();
ServerHttpRequest servletRequest = ((ServletRequestAttributes) ra).getRequest();
String xForwardedFor = servletRequest.getHeader("X-FORWARDED-FOR");
String remoteAddress = StringUtils.isBlank(xForwardedFor) ? servletRequest.getRemoteAddr() : xForwardedFor;

我的问题是:是否可以使用aop来获取 ServerHttpRequest 为了伐木?
我读过这篇文章,我认为这对于我的案例来说是不够的,例如记录客户地址。
非常感谢&&如果需要更多信息,请告诉我?

t1qtbnec

t1qtbnec1#

是的,这是可能的。 ServerHttpRequest 可以用来获取客户端地址,然后您就可以记录它。我没有aop的例子,但下面是ip的记录方式:

@GetMapping()
public Mono<Employee> receiveMono(ServerHttpRequest request) {
    log.info(request.getRemoteAddress().toString());
    ...

如果你能定期获得客户地址,你也可以通过aop获得。
在我的德国博客里,我写了一些关于Spring的文章:
https://agile-coding.blogspot.com/2021/02/webflux.html

相关问题