2012-03-04 63 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> 

希望这个证明对某人有用。