복붙노트

[SPRING] 404 페이지를 단일 페이지 앱으로 리디렉션하도록 스프링 부팅 구성

SPRING

404 페이지를 단일 페이지 앱으로 리디렉션하도록 스프링 부팅 구성

내 404 페이지를 찾을 수없는 요청을 내 단일 페이지 응용 프로그램으로 리디렉션하도록 Spring Boot 응용 프로그램을 구성하려고합니다.

예를 들어 localhost : 8080 / asdasd / asdasdasd / asdasd가 존재하지 않는다면 localhost : 8080 / notFound로 리디렉션되어야합니다.

문제는 하나의 페이지에 반응하는 앱이 있으며 로컬 호스트 인 localhost : 8080 /에서 실행된다는 것입니다. 따라서 봄은 localhost : 8080 / notFound로 리디렉션 한 다음 / (경로 유지)로 전달해야합니다.

해결법

  1. ==============================

    1.이것은 트릭을 수행해야합니다 : / notFound로 라우트하는 404에 대한 오류 페이지를 추가하고이를 SPA로 전달하십시오 (항목이 /index.html에 있다고 가정).

    이것은 트릭을 수행해야합니다 : / notFound로 라우트하는 404에 대한 오류 페이지를 추가하고이를 SPA로 전달하십시오 (항목이 /index.html에 있다고 가정).

    @Configuration
    public class WebApplicationConfig extends WebMvcConfigurerAdapter {
    
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/notFound").setViewName("forward:/index.html");
        }
    
    
        @Bean
        public EmbeddedServletContainerCustomizer containerCustomizer() {
            return container -> {
                container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,
                        "/notFound"));
            };
        }
    
    }
    
  2. ==============================

    2.이것은 전체 Spring Boot 2.0 예제입니다.

    이것은 전체 Spring Boot 2.0 예제입니다.

    @Configuration
    public class WebApplicationConfig implements WebMvcConfigurer {
    
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/notFound").setViewName("forward:/index.html");
    }
    
    
    @Bean
    public WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> containerCustomizer() {
        return container -> {
            container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,
                    "/notFound"));
        };
      }
    
    }
    
  3. ==============================

    3.누군가가 Spring Boot 애플리케이션에서 Angular / React / 다른 경로와 경로를 다루는 방법을 찾고자한다면, 표준 404 컨트롤러에서 index.html을 반환하지 않을 수도 있습니다. 이는 표준 Spring 컨트롤러 RequestMapping에서 수행 할 수 있습니다. 뷰 컨트롤러를 추가하거나 컨테이너 오류 페이지를 사용자 정의하지 않고도이 작업을 수행 할 수 있습니다.

    누군가가 Spring Boot 애플리케이션에서 Angular / React / 다른 경로와 경로를 다루는 방법을 찾고자한다면, 표준 404 컨트롤러에서 index.html을 반환하지 않을 수도 있습니다. 이는 표준 Spring 컨트롤러 RequestMapping에서 수행 할 수 있습니다. 뷰 컨트롤러를 추가하거나 컨테이너 오류 페이지를 사용자 정의하지 않고도이 작업을 수행 할 수 있습니다.

    RequestMapping은 와일드 카드를 지원하므로 응용 프로그램에서 잘 알려진 경로 집합 (예 : 각도 경로 등)과 일치시킬 수 있으며 앞으로 만 index.html을 반환 할 수 있습니다.

    @Controller 
    public class Html5PathsController { 
    
        @RequestMapping( method = {RequestMethod.OPTIONS, RequestMethod.GET}, path = {"/path1/**", "/path2/**", "/"} )
        public String forwardAngularPaths() { 
            return "forward:/index.html"; 
        } 
    }
    

    또 다른 옵션은 (https://spring.io/blog/2015/05/13/modularizing-the-client-angular-js-and-spring-security-part-vii) 이전 Spring 기사에서 빌린 것입니다. 명명 규칙 :

    @Controller 
    public class Html5PathsController { 
    
        @RequestMapping(value = "/{[path:[^\\.]*}")
        public String redirect() {
            return "forward:/index.html";
        } 
    }
    

    위의 구성은 마침표가없고 다른 컨트롤러에 아직 매핑되지 않은 모든 경로와 일치합니다.

  4. from https://stackoverflow.com/questions/44692781/configure-spring-boot-to-redirect-404-to-a-single-page-app by cc-by-sa and MIT license