2012-03-04 62 views
0

我已經與另一個Web應用程序並排部署了Orbeon Forms,可以將其稱爲myapp.war。我的web應用程序可以將xhtml發送給Orbeon並將其保存到數據存儲區。我還使用spring security來管理用戶。所以在web.xml中我首先聲明瞭Spring Security過濾器,然後是Orbeon Forms過濾器。所有這些工作正常。Orbeon與Spring Security和根網絡環境並排部署

如果我在根上下文中部署myapp(例如root.war),那麼在保存數據時會破壞Spring Security。原因是保存不通過/ myapp/orbeon/xforms-server-submit由Spring Security處理,然後Orbeon形成過濾器,但直接通過/ orbeon/xforms-server-submit,因爲myapp已經以root身份部署。

有誰知道是否有解決這個問題的辦法?

+0

我不知道是否有解決方案,因爲我不知道Spring Security是如何工作的,但想法是所有請求都會通過/ myapp,Orbeon的請求將通過/ myapp/orbeon通過過濾器。如果將/ myapp作爲上下文刪除,那麼這些路徑將以/ orbeon開頭,這也恰好與orbeon servlet匹配。 – ebruchez 2012-03-05 17:17:03

+0

Hi Erik。這是「問題」。我從Orbeon的角度看到的唯一解決方案是,當webapp部署在根「/」上下文中時,Orbeon在發佈時添加假上下文,說「/ root」,然後在應用程序的web.xml中。這將允許使用根上下文進行並排部署。無論如何,我似乎已經正確地理解了這些問題。 Spring Security依靠過濾器來添加安全上下文,並且這些必須在鏈中的Orbeon之上。 – 2012-03-05 22:10:01

回答

1

事實上,解決方案非常簡單,我錯誤地理解了發生的情況,但默認情況下,servlet過濾器只適用於請求,而不是轉發,因此當Orbeon轉發請求時Spring安全過濾器鏈沒有被應用,因此該應用程序未經認證。只需在xml配置中添加一個FORWARD調度程序:

<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
</filter-mapping> 

希望這個證明對某人有用。