Регистрация сервисного работника через Angular и Spring Boot 2 - PullRequest
1 голос
/ 19 марта 2019

У нас есть приложение, которое запускается в Spring Boot 2. Большая часть нашего сайта построена с использованием Angular 7. Теперь наш сценарий является своего рода другой причиной, а не передачей файлов Angular dist на сервер, который мы используем Spring Boot 2 для обслуживанияФайлы производственной сборки из angular,

Таким образом, наш конвейер генерирует файлы производственной сборки Angular (main.js, vendor.js и т. д.), и мы копируем их в целевую папку Spring Boot, упаковываем и разворачиваем.

Это означает, что, хотя я регистрирую работника сервиса с помощью пакета @angular/service-worker, мы обслуживаем его с помощью весенней загрузки.

Таким образом, в конечном итоге файлы работника сервиса обслуживаются из папки js/dist, то есть:https://shop.domain.com/js/dist/ngsw-worker.js

Таким образом, я регистрирую работника службы в порядке с /js/dist/ngsw-worker.js, и все, кажется, загружается.

Но когда я пытаюсь добавить в homeceen, я получаю ошибку:

Site cannot be installed: no matching service worker detected. You may need to reload the page, or check that the service worker for the current page also controls the start URL from the manifest

все относящиеся к этому файлы находятся в папке js/dist.Как: /js/dist/manifest.webmanifest /js/dist/ngsw.json /js/dist/safety-worker.js

Итак, я прочитал и нашел хороший заголовок с именем Service-Worker-Allowed

Так что в моем приложении Spring Boot 2 я регистрирую следующий WebFilter

ServiceWorkerHeaderFilter.java

package com.company.project.serviceworker;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebFilter(urlPatterns = "/js/dist/ngsw-worker.js")
public class AddServiceWorkerSecurityHeaderFilter implements Filter {

    @Override
    public void destroy() {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain) throws IOException, ServletException {
        HttpServletResponse httpServletResponse = (HttpServletResponse) response;
        httpServletResponse.setHeader("Service-Worker-Allowed", "/");
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }
}

Кажется, что заголовок работает нормально и файлы загружаются правильно.В моем файле манифеста я указываю start_url

"start_url": "/"

Я больше не указываю scope, так как заголовок http должен его переопределять.Но даже если я это укажу, ошибка будет повторяться.

Любая помощь будет принята с благодарностью.

...