AbstractReqestLoggingFilter 的 afterRequest() 方法接受不完整的消息文本

afterRequest() method from AbstractReqestLoggingFilter accepts incomplete message text

有一个 AbstractRegueestLoggingFilter class 的实现方法叫做 afterRegueest。它有两个参数:HttpServletRequest requestString message。由于某种原因,message这个参数来的不完整,也就是被截断了(感觉这个消息有维度,数据库中经常出现varhar的大小)。我不明白这怎么会发生。

P.S。该消息应显示有关客户端要求的请求的信息。例如 Put: /api/urlrequest body。我用它来记录。

所以body本身被截断了,并且已经在参数中输入了。

我该如何解决这个问题?

    @Override
    @SuppressWarnings("NullableProblems")
    protected void afterRequest(HttpServletRequest request, String message) { // Here it is already incomplete !!!!!
        if (!FORBIDDEN_URLS.contains(request.getRequestURI())) {
            ApiRequestLog log = new ApiRequestLog();
            log.setMethod(RequestMethod.valueOf(request.getMethod()).name());
            log.setUrl(request.getRequestURL().toString());
            log.setParams(request.getQueryString());
            String body = StringUtils.substringAfter(message, "payload=");
            if (StringUtils.isNotBlank(body)) {
                log.setBody(body);
            }
            try {
                log.setCreatedBy(UserHelper.getUser());
            } catch (RuntimeException ignored) {
            }
            try {
                queueService.sendToQueue(log, REQUESTS_FOR_SAVE);
            } catch (JMSException ignored) {
            }
        }
    }

问题是我们手动在代码中写入了我们可以接受的请求正文的最大长度。对此,我只是把最大字符数改大了。

@Autowired
    public CustomLoggingFilter(QueueService queueService) {
        setIncludePayload(true);
        setMaxPayloadLength(2048);
        setBeforeMessagePrefix("");
        setBeforeMessageSuffix("");
        setAfterMessagePrefix("");
        setAfterMessageSuffix("");
        this.queueService = queueService;
    }

我将 setMaxPayloadLength(2048) 更改为 100 万长度值。