2016-03-04 72 views
0

我試圖將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類,但對我來說,它看起來像該功能應該由我的應用程序類拿起。

謝謝!

回答

0

因此,原來的問題是,這些線在我的gradle這個編譯:

compile(group: "org.springframework.boot", name: "spring-boot-starter-actuator", version: "1.2.3.RELEASE") 
compile(group: "org.springframework.boot", name: "spring-boot-starter-web", version: "1.2.3.RELEASE") 
compile(group: "org.springframework.boot", name: "spring-boot-starter-test", version: "1.2.3.RELEASE") 
compile(group: "org.springframework.boot", name: "spring-boot-starter-jdbc", version: "1.2.3.RELEASE") 

這將是巨大的,如果任何人都可以擺脫一些瞭解爲什麼這些線路會破壞安全設置。

2

您必須將註釋@Configuration和@EnableWebSecurity添加到MessageSecurityWebApplicationInitializer中,並注意在春天採集它。比它應該工作。

+0

嘿謝謝。現在MessageSecurityWebApplicationInitializer的構造函數正在被調用,所以這是一個進步。我仍然看到: 爲bean創建過濾器初始化器'springSecurityFilterChain'; order = 2147483647,resource = class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class] 所以看起來好像過濾器沒有正確設置。但是這真的很有幫助,謝謝。 – Ryan

+0

我也很好奇爲什麼樣本不需要這些註釋..? – Ryan

+1

在本教程中,SecurityConfig類用'@EnableWebSecurity'註解。該註釋可以放在任何配置上,因此其效果與將其放置在MessageSecurityWebApplicationInitializer上相同。 你說得對,本教程缺少註釋'@Configuration',這看起來像是一個錯誤。 –