Spring 3.0-无法找到XML模式命名空间的Spring NamespaceHandler [http://www.springframework.org/schema/security]


179

任何想法可能是什么原因?

无法找到用于XML模式名称空间的Spring NamespaceHandler [ http://www.springframework.org/schema/security]

org.springframework.web.context.ContextLoader initWebApplicationContext: Context initialization failed
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/security]
Offending resource: ServletContext resource [/WEB-INF/applicationContext.xml]

这是我的applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/security
        http://www.springframework.org/schema/security/spring-security-3.0.xsd">
...
</beans:beans>

在我的pom.xml中,我有:

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>      
    <version>3.0.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-openid</artifactId>
    <version>3.0.1.RELEASE</version>
</dependency>

我在遵循春季Pizzashop教程时达到了这个目标
Rob Grant

这是您完整的pom.xml吗?因为那样您很可能会错过一个罐子。
Marco Schoolenberg '18

Answers:


286

我需要添加一个附加的Maven依赖项:

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>3.0.1.RELEASE</version>
    </dependency>

3
+1为了解决我的问题。有关重组Spring Security 3.0代码库的更多信息,请访问:blog.springsource.com/2009/06/03/spring-security-300m1-released
Rydell

好的链接。我也可以在几个月前使用它。
Taylor Leese 2010年

12
培根又被SO救了!
Andrew Swan 2010年

尝试仅使用spring-security-casjar 时,类似的解决方案也适用。
Ryan Ransford 2013年

对于有问题的人,我确实推荐此链接Unable to locate Spring NamespaceHandler for XML schema namespace [xxxxx]。过去我也遇到过类似的问题,这对我有很大帮助!
哥达

18

尝试部署应用程序时,我遇到了相同的错误消息。在Spring中,安全配置xml可以不同于applicationContext.xml,通常是WEB-INF文件夹中的applicationContext-security.xml。要应用的更改是针对web.xml的

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/applicationContext.xml
        /WEB-INF/applicationContext-security.xml
    </param-value>
</context-param>

而且applicationContext.xml看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">

    <http auto-config='true'>
        <intercept-url pattern="/login.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
        <intercept-url pattern="/**" access="ROLE_USER" />
        <form-login login-page='login.jsp'/>
    </http>

</beans:beans>

即使进行了这些更改,名称空间错误仍然存​​在。要消除此问题,请将以下jar文件添加到WEB-INF / lib,然后添加到库:

  • spring-security-acl-3.1.0.M2.jar
  • 弹簧安全配置-3.1.0.M2.jar
  • 春季安全核心-3.1.0.M2.jar
  • spring-security-taglibs-3.1.0.M2.jar
  • 春季安全网-3.1.0.M2.jar

您几乎必须使用Maven才能使Spring顺利运行。而且,当您无奈地这样做时,它仍然不起作用!某人在某处苦笑...这个答案帮助我减轻了一些挫败感。
Arne Evertsson

12

我为此苦了一段时间,这些答案都没有帮助。多亏了user64141的评论,我才意识到spring.handlers文件有问题。

我正在使用Maven的Shade插件来生成一个胖jar,并且每个Spring依赖项都覆盖了所有spring.handlers(和spring.schemas)文件。

Maven网站涵盖了这个确切的问题以及如何通过将文件附加在一起来解决问题:

http://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#AppendingTransformer



6

解决方案绝对不是您的WEB-INF / lib中的“ spring-security-config”。

对于我在Eclipse中使用Maven的项目,事实证明并非所有的Maven依赖项都被复制到WEB-INF / lib。查看Project-> Properties-> Deployment Assembly,仅复制了一些jar。

要解决此问题,我单击了“添加”,然后单击了“ Java Build Path Entires”,最后单击了“ Maven Dependencies”。

我一直在搜寻SO和网络在过去一个小时内寻找它,因此希望可以对其他人有所帮助。



3

@James Jithin-当您在xsi:schemaLocation中具有两个不同版本的bean和安全性模式时,也会出现这种异常。在您粘贴的代码段中就是这种情况:

xsi:schemaLocation="http://www.springframework.org/schema/beans   
 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
 http://www.springframework.org/schema/security  
 http://www.springframework.org/schema/security/spring-security-3.1.xsd"

就我而言,将它们都更改为3.1可以解决问题


我已经设法使其能够使用:http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/security/spring-security-3.2.xsd 在我的情况下,我缺少“ spring-security-config”罐子。
Ithar 2015年

同意此评论。由于这个原因发生了我的问题。
DolphinJava

2

我做了什么:

      <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>3.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>3.2.5.RELEASE</version>
        </dependency>

xsi:schemaLocation="
        http://www.springframework.org/schema/security 
        http://www.springframework.org/schema/security/spring-security-3.2.xsd
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-4.1.xsd">

完美地工作。更多Baeldung


0

如果您的pom中已经具有所有依赖项,请尝试:
1.从maven仓库文件夹中删除所有已下载的jar,用于“ org-> springframework”
。2.进行干净的Maven构建。


0

我今天遇到了非常类似的问题。出于某种原因,IntelliJ IDEA在部署应用程序时未包含Spring Security jar文件。我想我应该同意这里的大多数海报。


0

部署到处女座时出现此错误。解决方案是将其添加到我的捆绑包导入中:

org.springframework.transaction.config;version="[3.1,3.2)",

我注意到在META-INF下的Spring jar中有一个spring.schemas和spring.handlers部分,并且它们指向的类(在本例中为org.springframework.transaction.config.TxNamespaceHandler)必须被导入。



0

几分钟前遇到了相同的问题,我在部署程序集中缺少了“ Maven依赖”库。我是通过Eclipse中的“ Web部署程序集”部分添加的


0

如果添加依赖项还不能解决您的问题,请再次创建WAR存档。就我而言,我使用的是过时的WAR文件,而没有security-web和security-conf jar


0

在pom.xml文件中添加以下依赖项,如果使用的是IntelliJ,则将相同的jar添加到WEB-INF-> lib文件夹...。路径是Project Structure-> Atrifacts->从Available Elements窗格中选择jar并双击点击。它将添加到相应的文件夹

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>3.0.1.RELEASE</version>
</dependency>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.