无法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-config
的SecurityNamespaceHandler
我有同样的问题。 解决这个问题的唯一方法是将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>
- Spring @Transaction方法通过同一类中的方法调用,不起作用?
- spring和贫血域模型
- 注入EntityManager VS. EntityManagerFactory的
- 我可以为@Cacheable设置TTL吗?
- 为什么在Java EE中使用CDI?
- 为OPTIONS Http方法禁用Spring Security
- 如何接受Spring MVC控制器的GET请求中的Date params?
- Spring JSON请求获得406(不可接受)
- Spring Boot:由于缺lessEmbeddedServletContainerFactory bean,无法启动EmbeddedWebApplicationContext