Удалить HTTP-заголовок «Expires» (для потоковых файлов)

#java #micronaut

#java #micronaut

Вопрос:

В фильтре micronaut я указываю свои собственные заголовки, например, я устанавливаю заголовок «Cache-Control» с директивой «max-age». Поэтому я хочу удалить заголовок «Expires», потому что при использовании «Cache-Control» заголовок «Expires» игнорируется 1.

При возврате потокового файла из фильтра заголовок «Expires» и «Date» устанавливаются FileTypeHandler 2, и я не знаю, как это изменить.

Есть ли варианты изменить это?

Пример:

 @Filter("/**")
public class MyFilter implements HttpServerFilter {

    @Inject
    ImageService imageService;

    @Override
    public Publisher<MutableHttpResponse<?>> doFilter(HttpRequest<?> request, ServerFilterChain chain) {
        File image = imageService.getImage(request);

        return Publishers.just(
                HttpResponse.ok(new StreamedFile(new FileInputStream(image), MediaType.IMAGE_JPEG_TYPE))
                        .header("Cache-Control", "max-age=31449600")
                        .header("Access-Control-Allow-Methods", "GET")
                        .header("Referrer-Policy",  "same-origin")
        );
    }

}
  

Ответ №1:

Не уверен, почему именно вы хотите вернуть файл из фильтра

Если вам мешает генерировать эти заголовки только тот метод, который вы определили, вы можете просто переопределить его :

 @Singleton
@Replaces(FileTypeHandler.class)
public class CustomFileTypeHandler extends FileTypeHandler {

    public CustomFileTypeHandler(FileTypeHandlerConfiguration configuration) {
        super(configuration);
    }

    @Override
    protected void setDateAndCacheHeaders(MutableHttpResponse response, long lastModified) {
        //do nothing
    }
}
  

Комментарии:

1. Спасибо, это работает. И, конечно, контроллер был бы лучше, я думаю. Я обнаружил, что могу использовать «@Controller(«{ path}»)», потому что «/**» не работает в аннотации контроллера.