我試圖將Spring安全性添加到現有的Spring MVC項目中。我用這個作爲指導:在現有MVC項目中設置Spring安全性的問題
http://docs.spring.io/spring-security/site/docs/current/guides/html5//hellomvc.html
但是,我不能讓該項目在登錄屏幕顯示。我複製SecurityConfig.java和MessageSecurityWebApplicationInitializer.java逐字,當我將啓動日誌記錄到DEBUG,我看到:
o.s.b.c.e.ServletContextInitializerBeans:創建過濾器初始值設定爲bean'springSecurityFilterChain'; order = 2147483647,resource = class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class]
這表明MessageSecurityWebApplicationInitializer永遠不會被查看。果然,如果我創建一個默認構造函數並設置一個斷點,它永遠不會被擊中。
有趣的是,SecurityConfig.configureGlobal被調用,這看起來像應該設置登錄屏幕的調用。
那麼需要採取哪些步驟才能使MessageSecurityWebApplicationInitializer完成它的工作?我還是想知道,Spring是如何處理依賴注入,等等 - 這個類聲明應該引起這個東西在引導過程中得到回升(我本來期望某種註解):
public class MessageSecurityWebApplicationInitializer
extends AbstractSecurityWebApplicationInitializer {
}
我不能不幸的是有着許多其他的代碼,但是這是應用程序文件:
@ComponentScan(basePackages={"..."})
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class, SpringBootWebSecurityConfiguration.class})
@Configuration
public class Application extends SpringBootServletInitializer {
/**
* The main() method is required by the framework.
*
* @param args
* @throws IOException
*/
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
的一兩件事,樣品中,這個項目不會是MessageWebApplicationInitializer類,但對我來說,它看起來像該功能應該由我的應用程序類拿起。
謝謝!
嘿謝謝。現在MessageSecurityWebApplicationInitializer的構造函數正在被調用,所以這是一個進步。我仍然看到: 爲bean創建過濾器初始化器'springSecurityFilterChain'; order = 2147483647,resource = class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class] 所以看起來好像過濾器沒有正確設置。但是這真的很有幫助,謝謝。 – Ryan
我也很好奇爲什麼樣本不需要這些註釋..? – Ryan
在本教程中,SecurityConfig類用'@EnableWebSecurity'註解。該註釋可以放在任何配置上,因此其效果與將其放置在MessageSecurityWebApplicationInitializer上相同。 你說得對,本教程缺少註釋'@Configuration',這看起來像是一個錯誤。 –