我可以使用Spring安全性的多个安全上下文吗?

我有一个安全上下文定义,它使用PreAuthenticatedProcessingFilterEntryPoint作为我的应用程序的flex部分。 如何在我的应用程序的另一部分中使用标准表单登录和html表单的另一个定义? 这是我现在拥有的:

                   

我想要做的是为管理站点中的URL使用另一个身份validation提供程序,我目前拥有的是用于flex应用程序的URL。 所以我希望管理URL的安全性使用另一个userDetailsS​​ervice bean。

直到最近一直很棘手,但现在很容易!

Spring Security在3.1版中添加了对场景的支持。 它目前作为候选版本提供,由SEC-1171实施。 语法的详细信息在3.1中包含的手册中。

它使用起来非常简单。 基本上,您只需在Spring Security配置中定义多个http元素,每个上下文一个。 我们这样使用它:

         

需要注意的关键是第一个http元素上的pattern="/admin/**" 。 这告诉Spring, /admin下的所有URL都受制于该上下文而不是默认上下文 – 因此/admin下的URL使用您的预授权filter。

将每个filter链映射到不同的URL模式:

       

所有这些都与Spring Securityfilter链拦截了您的应用程序的哪些部分有关。 你的xml配置中的某个地方(取决于你是否做了简单的标记配置),有一个像这样的拦截正则表达式

  

您可以使用不同的拦截模式,使用不同的配置(也就是安全filter链的不同部分)。 如果你发布你当前的配置xml,我可以给你一个更具体的答案。

编辑:目前您正在使用http标记来定义Spring Security配置。 此标记用作快捷方式/帮助程序,它自动定义安全筛选器链的许多部分,也可以手动设置。 我认为您的用例不适合自动设置范例,因此您需要为不同的URL模式手动设置filter链(如下面的post中所示)。 您可以创建自己的PreAuthenticationFilter(它将采用自定义UserDetailsS​​ervice)并在适当的位置添加适用于您的filter链拦截映射。