2014-12-31 41 views
1

我們現有的Web應用程序使用Spring安全3.1構建,Wink(用於休息) 我們現在需要爲幾個資源添加oauth2(client_credentials流),我查看了很多示例以及他們使用Http命名空間配置以及彈簧調度器servlet(我們迄今還沒有)春季安全 - 與現有的FilterChainProxy實現oauth

問題是http命名空間正在創建一個我們已經在應用程序中使用的springSecurityFilterChain,所以首先我重命名了現有的過濾器所以默認可以和舊的共存。 但這不起作用,它或者是現有的鏈接爲請求或者新的鏈接工作。 我已經通過給出(在web.xml)空的配置位置嘗試以下已經
1中禁用調度servlet上下文 2.試圖在應用context.xml中所述的OAuth配置(右到現有的FilterChainProxy)
3.通過將現有鏈中的/ oauth /令牌設置爲無(因此新的可以接管),允許/ oauth /令牌
4.試圖在現有鏈中聲明oauth過濾器,但是沒有正確獲取權限clientAuthentication


我真的不知道還有什麼要嘗試 - 所以問題是:是否有可能噸o是否都在同一個webapp中聲明?或者是否有可能以舊的方式聲明oauth2配置。

感謝 的Shlomi

回答

2

我沒做到這一點,最終,具有API(使用OAuth保護)completey分離網址從應用程序的其餘部分。 所以Http命名空間創建springSecurityFilterChain bean,而其他命名空間只有不同的bean名稱。每個人都通過web.xml中的委託代理進行委託

我需要在其他鏈中放置API URL前綴並允許所有請求都通過,從而使oauth安全通道保持安全。 (即過濾器鏈圖案=「/ API/**」過濾器=「無)

關於彈簧的oauth2界到彈簧MVC那麼緊,我認爲是不是一個很好的實施方式。 調度Servlet的映射可以不是/ *,但必須要像/認證/ *

這樣一個特殊的過濾器從ClientCredentialsTokenEndpointFilter繼承與像超級特殊的路徑(「/ auth /中的OAuth /令牌」)是必要的。

它也不能be/api/*因爲這是我們其餘框架映射的真實API URI(眨眼RestServlet) 所以我們有這樣的東西

http://server:port/context/auth/oauth/token 
http://server:port/context/api/someresource (protected with oauth2) 
http://server:port/context/rest/someresource (old rest for application) 

希洛米