Spring Boot HeaderWriterFilter覆盖控制器中创建的标头

时间:2018-10-01 22:21:22

标签: spring controller header

当我将标题添加到Controller中的responseEntity时,它没有添加到响应中。我调试了代码,当它到达“ HeaderWriterFilter”时,它添加了默认头,但它没有跟踪Controller中添加的头。

@RequestMapping(
        value = "/get-file",
        method = RequestMethod.GET
)
public ResponseEntity<Resource> download(Principal principal, Long fileId) throws IOException {
    if (principal == null) {
        throw new UsernameNotFoundException("User not found.");
    }

    try {
        User loggedInUser = ((LoggedInUserDetails) ((UsernamePasswordAuthenticationToken) principal).getPrincipal()).getLoggedInUser();

//            Get file
        File file = this.fileService.getById(loggedInUser, fileId);
        if (file == null) {
            return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
        }

//            Get file for download
        java.io.File physicalFile = new java.io.File(file.getUrl());
        if (file == null) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
        }
        InputStreamResource resource = new InputStreamResource(new FileInputStream(physicalFile));

        HttpHeaders headers = new HttpHeaders();
        headers.add("test", "test.yaml");

        return ResponseEntity.ok()
        .headers(headers)
        .contentType(MediaType.parseMediaType("application/octet-stream"))
        .contentLength(physicalFile.length())
        .body(resource);
    }
    catch (FileNotFoundException e) {
        e.printStackTrace();
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
    }
    catch (Exception e) {
        e.printStackTrace();
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
    }
}

1 个答案:

答案 0 :(得分:0)

问题是WebSecurityConfig中缺少标头。我解决了添加问题

configuration.setExposedHeaders(Arrays.asList("fileName"));

在CorsConfigurationSource中。