【问题标题】:Spring 3 Security - what are and how exactly do the subtags under `<http>` work?Spring 3 Security - `<http>` 下的子标签是什么以及如何工作?
【发布时间】:2013-12-25 00:50:18
【问题描述】:

我正在使用一本名为 Spring in Practice 的精彩书籍来学习 Spring 3 安全性。我对&lt;http&gt; 标签下的标签在幕后的工作方式有疑问。

书上说:

&lt;http&gt; 元素通过创建一系列 servlet 过滤器来处理 网络安全的不同方面。通过设置auto-config="true",您 为基于表单的登录、HTTP 基本身份验证启用过滤器, 和注销。如果您愿意,可以设置auto-config="false"(即 默认值)并手动指定所需的过滤器。

我有 3 个关于 Spring 3 安全性的问题。

1)。 &lt;http&gt; 下的每个元素,例如 &lt;form-login&gt;&lt;remember-me&gt; 是否都是创建的过滤器? &lt;http&gt; 元素如何创建过滤器?

2)。如果我要设置auto-config="false",我将如何手动指定所需的过滤器?

3)。据我了解,&lt;authentication-manager&gt; 标签代表AuthenticationManager 接口。但是标签是如何做到这一点的呢? xml 中没有名为 AuthenticationManager 的 bean。嵌套标记 &lt;authentication-provider&gt; 也是如此。 AuthenticationProvider bean 没有在任何地方的 Spring xml 中列出...

提前感谢您的帮助。

【问题讨论】:

    标签: spring jakarta-ee spring-mvc spring-security


    【解决方案1】:

    http 元素和 authentication-manager 元素是 spring 安全命名空间配置的一部分。

    这些元素允许从安全的角度声明我们想要的最终结果(使用表单登录,这是注销页面等),而不是声明 spring bean 并将它们连接在一起。

    最终结果是一种更具声明性、可读性和可维护性的安全配置方式,而不是将 bean 连接在一起并手动构建过滤器链。此外,对于这些元素,通常配置较少,因为应用了默认值。

    这些元素是基于DSL 的安全 XML 示例。它在运行时的工作方式是这样的:

    Spring 将使用 XML 库(例如 DOM 实现)将 http 和 authentication-manager 的所有元素读入内存。

    根据 XML 的内容,将在 http 元素的情况下构建过滤器链,检查 class AuthenticationConfigBuilder 以了解它是如何构建的。

    用这个来复习提出的不同问题:

    1. 不一定,每个元素都不必是过滤器。 Spring 可以解析配置来做任何事情,而不必总是创建一个过滤器。例如,配置命名空间中的元素可能对应于过滤器之一使用的组件。

    2. 这个pdf的http元素部分有几个例子

    3. 这与AuthenticationManagerBeanDefinitionParser中的http元素类似

    【讨论】:

    • 我确实感受到了 OP 的痛苦。 Spring Security 真的真的需要 Java 配置,我认为 Spring Security 没有这个选项。与普通的旧 &lt;bean&gt; 配置不同,spring 安全性特别难以弄清楚,我几乎总是要去看代码。
    • 我更喜欢明确的&lt;bean&gt; / &lt;property&gt; 接线,这样我就知道幕后发生了什么。一切似乎都如此抽象,使用安全命名空间增加了配置的复杂性。
    • 我相信使用命名空间是可选的,我们总是可以自己连接东西以防更高级的使用。我不确定对于一个非常高级的用例是否最好只连接所有内容,因为我们不再使用默认值。此外,为了减少基于 XML 的 DSL 的痛苦,查看命名空间的 XSD 有助于了解 springframework.org/schema/security/spring-security.xsd 的可能性,特别是描述标签。但我想我明白你的意思,它隐藏了你需要了解真正发生的事情的内部结构。
    • @AdamGent Spring Security 3.2 添加了 Java 配置支持(将于本月晚些时候推出)。见docs.spring.io/spring-security/site/docs/3.2.x/reference/…
    猜你喜欢
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2017-01-14
    • 2014-01-09
    • 2016-06-29
    相关资源
    最近更新 更多