Как добавить пользовательский комплект фильтров в Vespa для включения CORS?

Я следовал за вопросом " Включить CORS в vespa" и написал и собрал новый пакет "filter-bundle" с RequestFilter и ResponseFilter, который добавляет заголовки, включающие CORS. Это мой файл pom.xml для сборки пакета

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.yahoo.bundle</groupId>
  <artifactId>filter-bundle</artifactId>
  <version>1.0-SNAPSHOT</version>

  <dependencies>
    <dependency>
      <groupId>com.yahoo.vespa</groupId>
      <artifactId>container</artifactId>
      <version>6.297.80</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>

      <plugin>
        <groupId>com.yahoo.vespa</groupId>
        <artifactId>vespa-application-maven-plugin</artifactId>
        <!-- Zip the application package -->
        <version>6.297.80</version>
        <executions>
          <execution>
            <goals>
              <goal>packageApplication</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>com.yahoo.vespa</groupId>
        <artifactId>bundle-plugin</artifactId>
        <version>6.297.80</version>
        <extensions>true</extensions>
        <configuration>
          <attachBundleArtifact>true</attachBundleArtifact>
          <bundleSymbolicName>filter-bundle</bundleSymbolicName>
          <bundleVersion>1.0.2</bundleVersion>
        </configuration>
      </plugin>

    </plugins>
  </build>



</project>

Я добавил встроенный jar-пакет в каталог /components моего "основного" пакета приложений и внес изменения, предложенные в моем файле services.xml, по ссылке https://docs.vespa.ai/documentation/jdisc/http-server-and-filters.html Я добавил следующий тег HTTP в мой файл services.xml.

<http>
  <filtering>
    <filter id='request-filter' class='com.yahoo.bundle.MyRequestFilter' bundle="filter-bundle" />
    <filter id='response-filter' class='com.yahoo.bundle.MyResponseFilter' bundle="filter-bundle" />

    <request-chain id='request-chain'>
      <filter id='request-filter' />
      <binding>http://*/*</binding>
    </request-chain>

    <response-chain id='response-chain'>
      <filter id='response-filter' />
      <binding>http://*/*</binding>
    </response-chain>
  </filtering>
  <server port="8080" id="main-server" />
</http>

Здесь "MyRequestFilter" и "MyResponseFilter" являются именами классов в моем комплекте фильтров (внутри встроенного jar-пакета фильтра, размещенного в каталоге application/components).

Выполнение этих шагов дало мне ошибку, что несколько заголовков, таких как "Bundle-SymbolicName", "Bundle-ManifestVersion", отсутствовали в моем файле MANIFEST.MF в jar-файле комплекта фильтра. Поэтому я отредактировал файл MANIFEST.MF, добавив требуемые заголовки, следуя https://docs.vespa.ai/documentation/bundle-plugin.html Edit-1: при добавлении строки "container-plugin" правильно сгенерирован файл MANIFEST.MF

Но после успешного построения моего приложения с вышеуказанными изменениями в jar-файле я все еще не могу видеть добавленные заголовки в моем Запросе или Ответе к / от Vespa, и все еще получаю ошибку, что CORS отключен на Vespa.

1 ответ

Не должно быть необходимости редактировать манифест пакета вручную, так как он генерируется модулем пакета. В настоящее время вы строите обычную банку, а не связку. Пожалуйста, добавьте следующее к вашей поме прямо под version тег:

<packaging>container-plugin</packaging>

Теперь он будет собран как пакет, и манифест будет сгенерирован правильно.

Вы можете удалить vespa-application-maven-plugin, поскольку это необходимо только для создания пакета приложения с помощью services.xml и т. д. При желании вы можете поместить классы фильтра в основное приложение вместе с любыми другими имеющимися у вас java-классами и полностью пропустить дополнительный пакет.

Другие вопросы по тегам