web-dev-qa-db-fra.com

Ecoute de conversion web.xml au démarrage du printemps

J'essaie de convertir mon projet en projet Spring Boot (fichier JAR exécutable avec Jetty embedded). Tout fonctionne avec un exemple standard, mais je souhaite migrer mon ancien fichier web.xml vers Spring Boot.

J'ai migré Servlet et Filtres mais je ne comprends pas comment migrer les filtres comme ceci:

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<listener>
    <listener-class>org.granite.config.GraniteConfigListener</listener-class> 
</listener> 
    <listener>
    <listener-class>org.granite.gravity.websocket.GravityWebSocketDeployer</listener-class>
</listener>

J'ai créé ma classe @SpringBootApplication et j'ai écrit dans toute la configuration:

@Bean
@Order(1)
public FilterRegistrationBean springSecurityFilterChain() {     
    FilterRegistrationBean filterRegBean = new FilterRegistrationBean();
    DelegatingFilterProxy delegatingFilterProxy = new DelegatingFilterProxy();
    filterRegBean.setFilter(delegatingFilterProxy);
    List<String> urlPatterns = new ArrayList<String>();
    urlPatterns.add("/*");
    filterRegBean.setUrlPatterns(urlPatterns);
    return filterRegBean;
}

Quelqu'un peut m'expliquer comment les auditeurs devraient être convertis?

9
drenda

Pour RequestContext, lisez this

 @Bean
    @ConditionalOnMissingBean(RequestContextListener.class)
    public RequestContextListener requestContextListener() {
        return new RequestContextListener();
    }

Pour l'autre auditeur, enregistrez-vous automatiquement lorsque vous utilisez spring-boot en tant que this link implique.

Pour vos propres auditeurs.

public class MyAdditionListeners extends SpringBootServletInitializer {

    protected final Log logger = LogFactory.getLog(getClass());

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        WebApplicationContext rootAppContext = createRootApplicationContext(servletContext);
        if (rootAppContext != null) {
            servletContext.addListener(new YourListenerHere());
        }
        else {
            this.logger.debug("No ContextLoaderListener registered, as "
                    + "createRootApplicationContext() did not "
                    + "return an application context");
        }
    }

Enfin, il existe un lien link dans lequel vous pouvez trouver des informations sur les écouteurs et la classe SpringApplication. Lire la section 

4
Koitoer

Spring Boot enregistrera automatiquement tout @Beans des types suivants avec le conteneur de servlet:

  • ServletContextAttributeListener
  • ServletRequestListener
  • ServletRequestAttributeListener
  • HttpSessionAttributeListener
  • HttpSessionListener
  • ServletContextListener

Par exemple, pour enregistrer GravityWebSocketDeployer qui est une ServletContextListener, ajoutez une méthode @Bean à votre classe de configuration:

@Bean
public GravityWebSocketDeployer gravityWebSocketDeployer() {
    return new GravityWebSocketDeployer();
}
8
Andy Wilkinson

Spring Boot enregistrera automatiquement toute extension @Bean de HttpServlet;

   @Bean
   public ServletRegistrationBean axisServletRegistrationBean() {
      ServletRegistrationBean registration = new ServletRegistrationBean(new AxisServlet(), "/services/*");
      registration.addUrlMappings("*.jws");
      return registration;
   }
0
Muzu