无法findXML模式命名空间的Spring NamespaceHandler

我正在开发我的第一个应用程序在春季安全。 我的applicationContext-security.xml文件看起来像这样:

<?xml version="1.0" encoding="UTF-8"?> <!-- - Namespace-based OpenID configuration --> <b:beans xmlns="http://www.springframework.org/schema/security" xmlns:b="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.0.xsd"> <http> <intercept-url pattern="/**" access="ROLE_USER"/> <intercept-url pattern="/index.xhtml*" filters="none"/> <logout/> <openid-login login-page="/index.xhtml" authentication-failure-url="/index.xhtml?login_error=true"> <attribute-exchange> <openid-attribute name="email" type="http://schema.openid.net/contact/email" required="true" count="2"/> <openid-attribute name="name" type="http://schema.openid.net/namePerson/friendly" /> </attribute-exchange> </openid-login> <remember-me token-repository-ref="tokenRepo"/> </http> <b:bean id="tokenRepo" class="org.springframework.security.web.authentication.rememberme.InMemoryTokenRepositoryImpl" /> <authentication-manager alias="authenticationManager"/> <user-service id="userService"> <user name="http://user.myopenid.com/" authorities="ROLE_SUPERVISOR,ROLE_USER" /> </user-service> </b:beans> 

和web.xml文件是:

 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <display-name>Spring Security OpenID Demo Application</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/applicationContext-security.xml </param-value> </context-param> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/classes/log4j.properties</param-value> </context-param> <context-param> <param-name>webAppRootKey</param-name> <param-value>openid.root</param-value> </context-param> <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <welcome-file-list> <welcome-file>faces/index.xhtml</welcome-file> </welcome-file-list> </web-app> 

清理和生成应用程序是成功的,但是当我尝试部署应用程序jetty 7给我下面的错误:

严重:上下文初始化失败
org.springframework.beans.factory.parsing.BeanDefinitionParsingException:configuration问题:找不到XML模式命名空间的Spring NamespaceHandler [ http://www.springframework.org/schema/security]
违规资源:ServletContext资源[/WEB-INF/applicationContext-security.xml]
在org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
在org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
在org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)

尝试了一切,但不能解决这个错误。 任何帮助,将不胜感激。

编辑我试着添加Spring-Security的3.0.2版本,得到这个:

上下文初始化失败
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:来自ServletContext资源的XML文档中的第13行[/WEB-INF/applicationContext-security.xml]无效;
嵌套的exception是org.xml.sax.SAXParseException; lineNumber:13; columnNumber:11; cvc-complex-type.2.4.c:匹配的通配符是严格的,但是对元素“http”没有声明。 在org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396)
在org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334

你的classpath需要一个spring-security-config.jar

exception意味着security: xml namescape不能由spring“parsing器”来处理。 他们是NamespaceHandler接口的实现,所以你需要一个知道如何处理<security: tags <security:的处理程序。 这是位于spring-security-configSecurityNamespaceHandler

我有同样的问题。 解决这个问题的唯一方法是将META-INF / spring.handler和每个spring jar文件的META-INF / spring.schemas的内容合并到我的META-INF项目下的相同文件名中。

这两个线程更好地解释它:

  • Maven程序集插件和Spring命名空间处理程序
  • 线程:无法findXML模式名称空间的Spring NamespaceHandler

在我的情况下,这是由maven-jar-plugin添加的自定义清单条目造成的。

 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <configuration> <archive> <index>true</index> <manifest> <addClasspath>true</addClasspath> </manifest> <manifestEntries> <git>${buildNumber}</git> <build-time>${timestamp}</build-time> </manifestEntries> </archive> </configuration> </plugin> 

删除以下条目解决了该问题

 <index>true</index> <manifest> <addClasspath>true</addClasspath> </manifest>