2011-07-26 22 views
3

我想直接從java代碼中使用沒有彈簧應用程序上下文(或彈簧容器)的彈簧安全web過濾器。如何在沒有應用程序上下文的情況下使用spring-security過濾器?

這可能嗎?我是否可以直接調用不同的彈簧生命週期方法,如果有的話,是否有一個如何做到這一點的示例(哪些不同的接口需要關心和排序)?

+0

你爲什麼要這麼做? – bluefoot

+0

我想重用彈簧安全的功能,但沒有容器的開銷。我不需要容器,否則不想引入這個XML概念等。 – chrisichris

回答

3

我認爲這是可能的但它不值得。

Spring是一個複雜的框架,它會將配置Java應用程序的負擔隔離開來。爲什麼你想使用沒有Spring的Spring?

關於你的問題,以前的Spring Security,Acegi聲稱可以在沒有Spring的情況下使用。

所以你可以嘗試,但你的主要問題將是在服務器啓動時加載整個應用程序。您需要複製包含ContextLoaderListener的功能。

嘗試創建自己的聽衆,而不是

<!-- Creates the Spring Container shared by all Servlets and Filters --> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

然後配置應用程序的主要servlet的(因爲我相信你不想使用Spring MVC)和安全過濾器西麥說。

祝你好運。

或者,你可以嘗試阿帕奇SHIRO

+0

謝謝,但是我不想實例化一個spring-application上下文。所以像你一樣,@simeon說spring-security不是正確的。我正在尋找更多的庫比框架發佈了一個新的問題,因此:http://stackoverflow.com/questions/6840986/any-library-for-authentication-in-a-java-web-app – chrisichris

5

我想用彈簧安全的網絡過濾器沒有一個Spring應用程序上下文

你不能。

因爲當你在定義過濾器鏈代理的web.xml

<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 

DelegatingFilterProxy實際上希望能夠找到在那裏你contextConfigLocation和有效的配置文件:

<context-param> 
    <param-name>contextConfigLocation</param-name> 

    <!-- This must be valid otherwise your .war deployment will fail --> 
    <param-value>WEB-INF/spring-contexts/spring-contexts.xml</param-value> 
</context-param> 
+0

我知道委託過濾器(因爲它查找上下文中的實際鏈),但是我可以實例化並設置「真實過濾器」像ExceptionTranslationFilter等在普通的Java?我的意思是春天總是說他們的容器是多麼的不可取,並且...... – chrisichris

+0

你可以在你的'web.xml'中聲明這些類爲過濾器,並且你可以實例化這些單獨的對象(最終,你幾乎會有一個完整的春天的背景)。但是,您將如何設置過濾器所需的對象引用? – bluefoot

+0

我想要檢驗並設置好所有舊java(實際上是yeti ml)代碼,使用自定義過濾器鏈將它們鏈接在一起 - 類似於FilterChainProxy - 並且從web.xml運行該過濾器。 – chrisichris

相關問題