Spring 3.0 – 无法findXML名称空间的Spring NamespaceHandler

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

无法findXML模式命名空间的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> 

我需要添加一个额外的Maven依赖:

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

试图部署应用程序时,我有相同的错误信息。 在Spring中,安全性configurationxml可以与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中,然后添加到库中:

  • 弹簧安全ACL-3.1.0.M2.jar
  • 弹簧安全configuration,3.1.0.M2.jar
  • 弹簧安全核心3.1.0.M2.jar
  • 弹簧安全标签库,3.1.0.M2.jar
  • 弹簧安全networking3.1.0.M2.jar

我努力了一会儿,这些答案都没有帮助。 感谢来自user64141的评论,我意识到spring.handlers文件存在问题。

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

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

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

我用spring-security-config jar解决了我的问题

这个解决scheme绝对不是在你的WEB-INF / lib中的“spring-security-config”。

对于我在Eclipse中使用Maven的项目,事实certificate并不是所有的Maven依赖项都被复制到WEB-INF / lib。 看着项目 – >属性 – >部署大会,只有一些jar子被复制。

为了解决这个问题,我点击了“Add”,然后点击“Java Build Path Entires”,最后点击“Maven Dependencies”。

我一直在寻找和网上最后一个小时寻找这个,所以希望这可以帮助别人。

一个很好的Maven Dependencies列表存在于: Spring Site所需的主要工件是:

  1. 弹簧安全核心
  2. 弹簧安全网
  3. 弹簧安全configuration

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

 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解决了这个问题

如果你已经在你的pom中拥有所有的依赖关系,请尝试:
1.删​​除所有下载的jar包,形成你的maven仓库文件夹'org-> springframework'
2.做一个maven干净的构build。

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

部署到处女座时出现这个错误。 解决的办法是把这个添加到我的包导入:

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

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

几分钟前有同样的问题,我错过了我的部署大会“Maven depencendies”库。 我通过Eclipse中的“Web部署程序集”部分添加了它

如果添加依赖项没有解决您的问题,请再次创buildWAR归档。 在我的情况下,我使用了过时的WAR文件,没有安全web和安全confjar

我做了什么:

  <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

在你的pom.xml文件中添加下面的依赖关系,如果你使用的是IntelliJ,那么把相同的jar添加到WEB-INF-> lib文件夹中….path是Project Structure – > Atrifacts – >从Available Elements窗格中selectjar,单击。 它将添加到相应的文件夹

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