我試圖在Spring Boot和嵌入式Jetty的「fat」可執行JAR中從main()
方法初始化Spring Security。 我使用Spring Security與Java配置(無web.xml)。問題是嵌入式Jetty無法註冊springSecurityFilterChain
過濾器。嵌入式Jetty環境中的Spring Boot和Spring Security集成
當我運行相同的JAR在碼頭(mvn jetty:run
)戰爭的話,正常工作時,我看到:
Initializing Spring embedded WebApplicationContext
但在嵌入式碼頭運行時,我看不出有什麼WebApplicationContext
得到初始化。
我有這個EmbeddedServletContainerFactory
:
@Bean
public EmbeddedServletContainerFactory servletContainerFactory() {
JettyEmbeddedServletContainerFactory factory = new JettyEmbeddedServletContainerFactory();
factory.setPort(8080);
factory.addServerCustomizers(new JettyServerCustomizer() {
public void customize(Server server) {
// TODO: INITIALIZE SPRING SECURITY SOMEHOW...
}
});
return factory;
}
我試圖創造AbstractSecurityWebApplicationInitializer
一個子類,但它是在衝突與我SpringBootServletInitializer
。在我pom.xml
我有這些依賴關係:
spring-boot-starter-jetty
spring-boot-starter-logging
spring-boot-starter
當我添加spring-boot-web
它拋出:
java.lang.IllegalArgumentException: A ServletContext is required to configure default servlet handling
我也試圖註冊DelegatingFilterProxy
與碼頭,但隨後拋出:
java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
我猜我需要告訴碼頭使用WebApplicationContext
,但如何?
你爲什麼不用一個主要的方法創建一個類來運行你的應用程序?春季啓動會爲你做設置。請參閱http://spring.io/guides/gs/securing-web/,然後將jar轉換爲war http://spring.io/guides/gs/convert-jar-to-war/ –
我正在做 - 就像Spring Boot文檔所建議的一樣。我只需要從'main()'初始化Spring Security。 – albogdano
SPring引導將執行此操作以及引導Jetty容器。我不明白你爲什麼要自己創建一個容器,因爲spring boot會爲你做所有這些...... –