Spring Boot - page 404 personnalisée avec Tomcat autonome


derrière

J'exécute une application de démarrage Spring dans une instance Tomcat autonome et j'essaie de remplacer les pages d'erreur. D'après ce que je comprends, Spring fournit un filtre ErrorPageFilter qui me permet de simplement configurer les pages d'erreur comme d'habitude pour que Springs EmbeddedServletContainerCustomizergère ce cas exactement.

J'ai donc mon initialiseur de configuration automatique / servlet standard dans une classe:

@Configuration
@ComponentScan
@EnableAutoConfiguration(exclude = [ GroovyTemplateAutoConfiguration, SecurityAutoConfiguration, ErrorMvcAutoConfiguration, JmxAutoConfiguration ] )
class Application extends SpringBootServletInitializer {

    @Override protected SpringApplicationBuilder configure( SpringApplicationBuilder application ) {
        application.sources( Application )
    }

(J'utilise la même classe pour l'autoconfiguration et le servlet init, c'est pourquoi je passe simplement ma Applicationclasse dans la méthode configure)

En regardant le code source de SpringBootServletInitializer, il semble que la ErrorPageFilterclasse est ajoutée en étendant simplement cette classe ici. J'ai désactivé le ErrorMvcAutoConfiguration- mais encore une fois, en regardant ce code source, il semble que cela ne fait que définir les pages d'erreur par défaut et ne rien configurer avec le ErrorPageFilter.

J'ai alors mon fichier de configuration d'erreur:

@Configuration
class ErrorConfiguration implements EmbeddedServletContainerCustomizer {

    @Override public void customize( ConfigurableEmbeddedServletContainer container ) {
        container.addErrorPages(new ErrorPage( HttpStatus.NOT_FOUND, "/errors/404" ))
    }

Cependant, si je viens de visiter une URL invalide et que je DispatcherServletne trouve pas de correspondance, je reçois simplement tomcats /404.html - pas ma vue liée à " /errors/404" (ce chemin est mappé à un modèle de vue thymeleaf, cela fonctionne bien - si je navigue vers / errors / 404, il affiche ok)

Des idées pour lesquelles ma page d'erreur personnalisée ne fonctionne pas? traçant les journaux, j'obtiens une ligne sur la ErrorPageFilterconfiguration et l'installation correctes au démarrage de l'application, mais aucune mention du filtre ne fait quoi que ce soit lorsqu'une demande arrive.

Kamoor

Vous pouvez utiliser le code suivant pour les anciennes versions de spring boot (0.5.x)

  public class ServerCustomization extends ServerProperties {

  @Override
  public void customize(ConfigurableEmbeddedServletContainerFactory factory) {

    super.customize(factory);
    factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,
            "/yourpath/error-not-found.jsp"));
    factory.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR,
            "/yourpath/error-internal.jsp"));
    factory.addErrorPages(new ErrorPage("/yourpath/error-other.jsp"));
   }
}

Les nouvelles versions de démarrage à ressort (1.X.RELEASE) ont une certaine refactorisation autour de ServerProperties. Voir ci-dessous,

  public class ServerCustomization extends ServerProperties {

  @Override
  public void customize(ConfigurableEmbeddedServletContainer container) {

    super.customize(container);
    container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,
            "/jsp/404.jsp"));
    container.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR,
            "/jsp/500.jsp"));
    container.addErrorPages(new ErrorPage("/jsp/error.jsp"));
  }

}

Définissez ensuite un bean pour injecter ServerProperies.

@Bean
public ServerProperties getServerProperties() {
    return new ServerCustomization();
}

Exemple de projet publié dans git

Très important: si vous utilisez maven pour construire, vous devez stocker tous les fichiers de ressources dans le dossier src / main / resources. Sinon, maven n'ajoutera pas ces fichiers à l'artefact final du jar.

Articles connexes


Page d'erreur Spring Boot et 404 personnalisée

brunoïde: Dans mon application Spring Boot, j'essaie de configurer des pages d'erreur personnalisées, par exemple pour 404, j'ai ajouté un bean suivant à la configuration de mon application: @Bean public EmbeddedServletContainerCustomizer containerCustomizer()

Page d'erreur 404 personnalisée dans Spring-boot

utilisateur1583209 J'essaie de créer une page d'erreur personnalisée pour une URL non valide dans SpringMvc (Spring-boot version 1.5.1). Afin de désactiver la page d'erreur de marque blanche par défaut, j'ai : application.properties spring.thymeleaf.cache=fals

Spring Boot/Sécurité - Page 404 personnalisée

PDStat J'ai créé une page d'erreur 404 personnalisée dans mon application Spring Boot, j'utilise également Spring Security et j'ai un point d'entrée d'authentification avec un certain nombre d'URL autorisées (page d'erreur incluse dans cette liste). Ce que je

Spring Boot YML et serveur autonome Tomcat 8

Shivam Sinha J'ai la structure de répertoire / fichier de configuration suivante: src/main/resource/config: application.yml application-dev.yml application-sit.yml Remarque selon la " Configuration Bootiful " https://spring.io/blog/2015/01/13/configuring-i

Spring Boot 2.2.5 page 404 introuvable réponse json personnalisée

mhndev: Comment puis-je avoir un json personnalisé pour mes 404 pages? en fait, ce dont j'ai besoin est de pouvoir créer des erreurs json personnalisées pour mon application. par exemple pour 404,401,403,422, ... j'ai beaucoup cherché et ce que j'ai trouvé est