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网站涵盖了这个确切的问题,以及如何通过将文件附加到一起来解决它:
我用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所需的主要工件是:
- 弹簧安全核心
- 弹簧安全网
- 弹簧安全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)必须被导入。
我发现这个解决scheme:
将此jar包含在您的项目中
几分钟前有同样的问题,我错过了我的部署大会“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>