在两个不同的文件中定义 spring security http 元素?

发布于 2024-12-07 04:17:05 字数 839 浏览 1 评论 0原文

是否可以定义 security:intercept-url 元素和 security:custom-filter 元素用于单个 security:http 在两个不同的 Spring 配置文件中?

这样我们就可以干净地重用 security:custom-filter 定义,这些定义在许多应用程序中很常见,而拦截规则则不然。


我不能简单地复制 元素,因为我得到 BeanDefinitionParsingException: Configuration Problem: Duplicate;检测到元素。我很清楚如何使用 import 拆分普通 bean 文件

Is it possible to define the security:intercept-url elements and security:custom-filter elements for a single security:http in two different Spring configuration files?

This is so we can cleanly reuse the security:custom-filter definitions which will be common across many applications with intercept rules that will not.


I can't simply duplicate the <security:http> element because I get BeanDefinitionParsingException: Configuration problem: Duplicate <http> element detected. I am well well aware of how to split a normal bean file with import

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

冷月断魂刀 2024-12-14 04:17:05

正如评论中所要求的:

3.1.x 之前的 Spring Security 版本不允许多个 http 元素定义。

然而 3.1 确实如此。

此处是该功能的 Jira 问题。

这篇关于 3.1 更改的文章也可能会有所帮助。


您可以在 web.xml 中定义另一个上下文文件:

<context-param>
  <param-name>contextConfigLocation</param-name>
    <param-value>
      /WEB-INF/spring-contexts/context1.xml
      /WEB-INF/spring-contexts/context2.xml
    </param-value>
</context-param>

或者您可以定义上下文所在的目录并以您喜欢的任何方式命名它们,而不必单独指定每个上下文文件:

<context-param>
  <param-name>contextConfigLocation</param-name>
    <param-value>
      /WEB-INF/spring-contexts/*
    </param-value>
</context-param>

关于 Ayusman 的答案,您实际上可以导入安全上下文进入你的bean上下文:

<beans>

    <import resource="classpath*:/security-context-*.xml"/>

    <bean><!-- blah blah --></bean>

</beans>

As requested in comment:

Spring Security versions prior to 3.1.x do not allow multiple http element definitions.

3.1 does however.

Here is the Jira issue for the feature.

This article on 3.1 changes might also be helpful.


You can define another context file in your web.xml:

<context-param>
  <param-name>contextConfigLocation</param-name>
    <param-value>
      /WEB-INF/spring-contexts/context1.xml
      /WEB-INF/spring-contexts/context2.xml
    </param-value>
</context-param>

Or you can define a directory where your contexts would be and name them any way you like without having to specify each context file separately:

<context-param>
  <param-name>contextConfigLocation</param-name>
    <param-value>
      /WEB-INF/spring-contexts/*
    </param-value>
</context-param>

Regarding Ayusman's answer, you actually can import your security contexts into your bean contexts:

<beans>

    <import resource="classpath*:/security-context-*.xml"/>

    <bean><!-- blah blah --></bean>

</beans>
猛虎独行 2024-12-14 04:17:05

使用应用程序上下文文件中的导入。

custom-filter.appcontext.xml
.
.
<import resource="interceptor-url-file.xml"/>

请注意,这两个文件都需要具有正确的 spring xml 架构详细信息,并且必须是有效的 XML 文件。

use the import in application context file..

custom-filter.appcontext.xml
.
.
<import resource="interceptor-url-file.xml"/>

Note that both files need to have the proper spring xml schema details and MUST be valid XML files.

享受孤独 2024-12-14 04:17:05

我已经为这个错误工作了 5 个小时。真是愚蠢的问题。

此错误是一个解析错误,当您注释 applicationContext-security.xml 中的某些行时,无法正确生成文件。

让我解释一下示例代码。

<port-mappings>
        <port-mapping http="7001" https="7002" />
</port-mappings>

<!--    <port-mappings>
        <port-mapping http="7015" https="7515" />
    </port-mappings>
 -->

此行生成为,

<port-mappings>
        <port-mapping http="7001" https="7002" />
</port-mappings>

    <port-mappings>
        <port-mapping http="7015" https="7515" />
    </port-mappings>
 -->

以便编译器告诉您“检测到重复元素”。因为生成的文件包含重复元素。

我希望能帮助你。

I have been working on this error for 5 hours. Really stupid problem.

This error is a parse error that when you comment some lines in applicationContext-security.xml, files are not generated correctly.

Let me explain on an example code.

<port-mappings>
        <port-mapping http="7001" https="7002" />
</port-mappings>

<!--    <port-mappings>
        <port-mapping http="7015" https="7515" />
    </port-mappings>
 -->

this lines are generated as,

<port-mappings>
        <port-mapping http="7001" https="7002" />
</port-mappings>

    <port-mappings>
        <port-mapping http="7015" https="7515" />
    </port-mappings>
 -->

so that, compiler tells you "duplicate element detected". Because generated file includes duplicate elements.

I hope to help you .

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文