簡體   English   中英

為什么sendError返回空的響應主體

[英]Why sendError returns empty response body

我正在嘗試使用HttpServletResponse中的sendError方法,但始終會返回一個空的正文響應。

@Override
protected void doFilterInternal(@NonNull HttpServletRequest httpServletRequest, 
                                @NonNull HttpServletResponse httpServletResponse,
                                @NonNull FilterChain filterChain)
                                    throws ServletException, IOException {

        String token = jwtTokenProvider.resolveToken(httpServletRequest);
        try {
            if (token != null && jwtTokenProvider.validateToken(token)) {
                Authentication auth = jwtTokenProvider.getAuthentication(token);
                SecurityContextHolder.getContext().setAuthentication(auth);
            }
        } catch (CustomException ex) {
            SecurityContextHolder.clearContext();
            httpServletResponse.sendError(ex.getHttpStatus().value(), ex.getMessage());
            return;
        }
        filterChain.doFilter(httpServletRequest, httpServletResponse);
}

由於它不起作用,我嘗試構建自己的響應並將其返回給客戶端(這是一個API調用)。

String error = "Expired or invalid JWT token";
ApiError errorResponse = new ApiError(new Date(),500, HttpStatus.INTERNAL_SERVER_ERROR, error, ex.getLocalizedMessage(), httpServletRequest.getRequestURL().toString());
httpServletResponse.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
httpServletResponse.getWriter().write(convertObjectToJson(errorResponse));
private String convertObjectToJson(Object object) throws JsonProcessingException {
        if (object == null) {
            return null;
        }
        ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString(object);
}

這可行,但是我必須使用字符串構造它,然后將其轉換為JSON。 我只想使用sendError方法。 有人可以幫我弄清楚為什么響應正文始終為空嗎? 空主體響應的狀態碼(使用sendError時)為403。

從1.5.8升級到Spring Boot 2.1時,我開始遇到同樣的問題。

在升級之前,過濾器HeaderWriterFilter不在過濾器鏈中,它似乎是由spring自動添加的。 調用sendError時,此篩選器還會調用您的篩選器。

您沒有提到是要實現Filter還是要擴展特定的過濾器,但是如果可以擴展OncePerRequestFilter,它應該可以解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM