Dans la configuration de type web.xml classique, vous pouvez configurer des paramètres de contexte comme ceci
web.xml
...
<context-param>
<param-name>p-name</param-name>
<param-value>-value</param-value>
</context-param>
...
Comment cela est-il réalisé dans Spring-Boot? J'ai un filtre qui nécessite des paramètres.
J'utilise @EnableAutoConfiguration
et ont inclus <artifactId>spring-boot-starter-jetty</artifactId>
dans mon pom.
Vous pouvez définir des paramètres sur l'ensemble ServletContext
en déclarant un bean ServletContextInitializer
:
@Bean
public ServletContextInitializer initializer() {
return new ServletContextInitializer() {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.setInitParameter("p-name", "-value");
}
};
}
pdate: dans Spring Boot 1.2, l'utilisation d'un ServletContextInitializer
n'est plus nécessaire. Vous pouvez maintenant configurer un paramètre sur ServletContext
sur une seule ligne dans application.properties
:
server.context_parameters.p-name=-value
Vous pouvez réellement y parvenir en utilisant Java config. Si vous avez un filtre qui nécessite certains paramètres, placez-les simplement dans votre application.yml (ou .properties), injectez-les en utilisant @Value
dans votre classe de configuration et enregistrez-les dans FilterRegistrationBean
.
Par exemple:
@Value("${myFilterParam}")
private String myFilterParam;
@Bean(name="myFilter")
public FilterRegistrationBean myFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new MyFilter());
filterRegistrationBean.setInitParameters(Collections.singletonMap("p-name", "p-value"));
return filterRegistrationBean;
}
Aussi JavaDoc pour FilterRegistrationBean
:
Mise à jour
Vous pouvez enregistrer des paramètres pour le contexte de servlet dans la méthode SpringBootServletInitializer#onStartup()
. Votre classe Application peut étendre le SpringBootServletInitializer
et vous pouvez remplacer la méthode onStartup
et y définir les paramètres. Exemple:
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.setInitParameter("p-name", "p-value");
super.onStartup(servletContext);
}
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
Une autre alternative est de définir ServletContextInitializer
bean comme suggéré par Andy Wilkinson.
Vous pouvez également définir InitParameterConfiguringServletContextInitializer dans votre configuration. Exemple:
@Bean
public InitParameterConfiguringServletContextInitializer initParamsInitializer() {
Map<String, String> contextParams = new HashMap<>();
contextParams.put("p-name", "-value");
return new InitParameterConfiguringServletContextInitializer(contextParams);
}