2011-09-28 64 views
4

是否可以在兩個不同的Spring配置文件中爲單個security:http定義security:intercept-url元素和security:custom-filter元素?在兩個不同的文件中定義spring security http元素?

這樣我們就可以乾淨地重複使用定義,這在很多應用程序中都是常見的,而截取規則不會。


我不能簡單地複製<security:http>元素,因爲我得到BeanDefinitionParsingException: Configuration problem: Duplicate <http> element detected。我很清楚地知道如何分割與import

+0

嘿,我知道這是一段時間,但我有這個確切的問題。你最終升級到Spring Security 3.1了嗎?如果是的話,你有沒有找到一種方法來實現將攔截器和過濾器分離到不同的上下文配置文件中? – msrxthr

+0

@ user14269686還沒有,它會上來。 –

+0

是的,如果我找到了一種方法,會讓你知道......看起來他們有其他想法來允許多個http元素[按照文檔](http://static.springsource.org/spring-security /site/docs/current/reference/security-filter-chain.html#filter-chains-with-ns) – msrxthr

回答

0

使用應用程序上下文文件導入正常Bean文件..

custom-filter.appcontext.xml 
. 
. 
<import resource="interceptor-url-file.xml"/> 

注意這兩個文件需要有正確的Spring XML架構的詳細信息,必須是有效的XML文件。

+0

所以我只聲明'安全:http'兩次? –

+0

@ C.羅斯我很抱歉,我給出了一個不正確的答案。我檢查了spring security xsd,它不允許導入。可能是其他成員可以提供正確的答案。讓我看看,如果我找到了什麼。 – Ayusman

+0

安全性xsd不會,但是bean會。我正在嘗試現在測試您的建議是否有效... –

4

的要求,在註釋:到3.1.X不允許多個http元素定義之前

Spring Security的版本。

3.1然而,

Here是該功能的Jira問題。

This article對3.1的更改可能也有幫助。


您可以在web.xml中定義的另一個上下文文件:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/spring-contexts/context1.xml 
     /WEB-INF/spring-contexts/context2.xml 
    </param-value> 
</context-param> 

,也可以定義一個目錄,你的背景是和他們的名字你喜歡的任何方式,而不必指定每個上下文單獨文件:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/spring-contexts/* 
    </param-value> 
</context-param> 

關於Ayusman的回答,實際上,你可以導入你的安全上下文到您的bean上下文中:

<beans> 

    <import resource="classpath*:/security-context-*.xml"/> 

    <bean><!-- blah blah --></bean> 

</beans> 
+1

Simeon這是如何解決我的問題?我沒有任何問題導入文件,而是分割'http'元素,這是我對@Ayusman的迴應,不允許被複制。 –

+0

@C。 Ross Ahh,在Spring 3.1.x之前版本中不允許http元素重複,我假設你使用3.1。你在用哪個? – Simeon

+0

@C。 Ross在3.1中,你應該沒有問題在多個文件中定義多個'http'元素,只要你喜歡,或者在同一個文件中。 https://jira.springsource.org/browse/SEC-1171 – Simeon

0

我一直在處理這個錯誤5個小時。真是愚蠢的問題。

此錯誤是一個解析錯誤,當您在applicationContext-security.xml中註釋了一些行時,文件無法正確生成。

讓我解釋一個示例代碼。

<port-mappings> 
     <port-mapping http="7001" https="7002" /> 
</port-mappings> 

<!-- <port-mappings> 
     <port-mapping http="7015" https="7515" /> 
    </port-mappings> 
--> 

此行所產生,

<port-mappings> 
     <port-mapping http="7001" https="7002" /> 
</port-mappings> 

    <port-mappings> 
     <port-mapping http="7015" https="7515" /> 
    </port-mappings> 
--> 

,這樣,編譯器會告訴你 「重複的元素檢測」。由於生成的文件包含重複元素。

我希望能幫到你。

相關問題