Spring升级到5.2之后,项目在无网络的情况下无法启动项目。报xml的错误

项目在没升级spring5.2之前是可以在没有网络的情况下编译启动运行的。升级之后就报错了。

错误:

[WARNING] Failed startup of context o.e.j.m.p.JettyWebAppContext@290c266c{/siam,file:///D:/projectdata/newsiam/siam/siam-server/siam-server-webapp/src/main/webapp/,UNAVAILABLE}{file:///D:/projectdata/newsiam/siam/siam-server/siam-server-webapp/src/main/webapp/}
MultiException[org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 26 in XML document from ServletContext resource [/WEB-INF/spring-configuration/siam-security.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 26; columnNumber: 48; cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'sec:http'., org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 26 in XML document from ServletContext resource [/WEB-INF/spring-configuration/siam-security.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 26; columnNumber: 48; cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'sec:http'., org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 26 in XML document from ServletContext resource [/WEB-INF/spring-configuration/siam-security.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 26; columnNumber: 48; cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'sec:http'., javax.servlet.ServletException: api@17a1a==org.springframework.web.servlet.DispatcherServlet,jsp=null,order=2,inst=false, javax.servlet.ServletException: console@38b6e557==org.springframework.web.servlet.DispatcherServlet,jsp=null,order=2,inst=false]
	at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:731)
	at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:374)
	

我的security.xml配置

主要原因就是这个security.xml的配置造成的。

首先,看到spring-security.xsd引用是没有指定版本的。报错的原因,就是没有找到这个xsd,那么spring肯定是本地找这个xsd没有找到,然后联网去找,网络也是断的,所以才会造成报错。

那么为什么会找不到呢。就要看spring5.2的jar包了。

spring xsd获取是通过spring.schemas配置键值对获取的,如下是路径:

Spring升级到5.2之后,项目在无网络的情况下无法启动项目。报xml的错误_第1张图片

打开spring.schemas,就会发现一个坑

Spring升级到5.2之后,项目在无网络的情况下无法启动项目。报xml的错误_第2张图片

因为我没指定版本,而没指定版本的key的地址是https的,而我引用的是http的地址,所以这个schema中没有与我不指定版本相匹配的key,当然在本地找不到了,就会到网络上查找,也连不通,最后就报错了。

把本地引用的xsd改成https就可以正常在无网络环境使用了。

你可能感兴趣的:(java后端-常见错误,spring5.2,无网络,启动报错)