#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}»)», потому что «/**» не работает в аннотации контроллера.