【问题标题】:How to map Spring Security <http> elements onto specific servlets如何将 Spring Security <http> 元素映射到特定的 servlet
【发布时间】:2012-06-23 16:43:45
【问题描述】:

我有一个带有两个 servlet 和多个与每个 servlet 关联的映射的 Web 应用程序,即

web.xml:

<servlet-mapping>
    <servlet-name>cheese</servlet-name>
    <url-pattern>/edam/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>cheese</servlet-name>
    <url-pattern>/cheddar/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>dog</servlet-name>
    <url-pattern>/poodle/*</url-pattern>
</servlet-mapping>
...

我现在想将 Spring Security 应用到这个 Web 应用程序,为每个 servlet 使用不同的安全配置。这是因为 servlet 具有不同的身份验证要求。因此,我希望只有两个过滤器映射:

<filter-mapping>
    <filter-name>springSecurityFilterChainCheese</filter-name>
    <servlet-name>cheese</servlet-name>
</filter-mapping>
<filter-mapping>
    <filter-name>springSecurityFilterChainDog</filter-name>
    <servlet-name>dog</servlet-name>
</filter-mapping>

使用 Spring Security 3.1,我可以定义多个 &lt;http&gt; 元素,这看起来是个不错的方法。但是,我看不到如何为每个 &lt;http&gt; 元素指定 bean 名称或将元素映射到 servlet 的任何其他方式。

我知道我可以specify a pattern attribute on &lt;http&gt;,但是我需要在我的 Spring Security 配置中重复 servlet 到 URL 的映射,这不是 DRY。

如何将&lt;http&gt; 元素映射到这样的特定 servlet?还是我需要扩展 &lt;http&gt; 元素并自己定义我所有的 Spring Security bean?

【问题讨论】:

    标签: spring-security


    【解决方案1】:

    从您的示例中不确定,但您真的需要两个过滤器吗?

    你读过http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#ns-minimal吗?这可以让你朝着正确的方向前进。

    您可以在单个元素中包含多个元素;那对你有用吗?我不知道有任何其他方式来做你所要求的。请记住将最具体的规则放在顶部,因为这是它们将被评估的顺序。

    有时您无法拥有完全 DRY 的解决方案,至少它不是代码。如果你真的很担心,那么使用一些机制,比如 Ant 的来填充 servlet 名称和模式元素。

    【讨论】:

    • 是的,这是我在上面链接到的stackoverflow.com/questions/8355593/… 中公认的答案。我的问题是专门寻找一种命名 &lt;http&gt; 元素的方法,以便我可以将它们链接到特定的过滤器,以使我的 URL 到 servlet 映射干燥。
    • 糟糕,我以为这是一个超链接,但是当我在平板电脑上单击它时,它并没有将我带到不同的页面,所以我认为它只是带下划线的文本;不同的浏览器给出不同的结果。
    【解决方案2】:

    查看 Spring Security 的源代码,似乎可以通过在 &lt;http&gt; 元素上提供 idname 来实现,但 Spring Security XML 模式防止这种情况!我已经相应地提出了https://jira.springsource.org/browse/SEC-1978

    【讨论】:

    • 我请求的 Spring Security 问题作为边缘案例被拒绝,因此没有解决方案。
    猜你喜欢
    • 2012-12-23
    • 1970-01-01
    • 2016-02-17
    • 2022-08-18
    • 2018-02-08
    • 2015-10-27
    • 2016-07-05
    • 2016-06-09
    相关资源
    最近更新 更多