Xml ¿;为什么Spring安全配置在WebSphereApplicationServer上生成cvc复杂类型.2.4.c?
我已经为这个问题挣扎了几个星期。我有一些我最近从4迁移到Spring5的遗留代码。代码在localhost上运行良好,但在上载到WebSphereApplicationServer时会严重崩溃 错误如下所示:Xml ¿;为什么Spring安全配置在WebSphereApplicationServer上生成cvc复杂类型.2.4.c?,xml,spring-security,configuration,websphere,Xml,Spring Security,Configuration,Websphere,我已经为这个问题挣扎了几个星期。我有一些我最近从4迁移到Spring5的遗留代码。代码在localhost上运行良好,但在上载到WebSphereApplicationServer时会严重崩溃 错误如下所示: https\://www.springframework.org/schema/security/spring-security.xsd=org/springframework/security/config/spring-security-5.2.xsd https\://www.spr
https\://www.springframework.org/schema/security/spring-security.xsd=org/springframework/security/config/spring-security-5.2.xsd
https\://www.springframework.org/schema/security/spring-security-5.2.xsd=org/springframework/security/config/spring-security-5.2.xsd
http\://www.springframework.org/schema/security/spring-security-5.1.xsd=org/springframework/security/config/spring-security-5.1.xsd
...
http://www.springframework.org/schema/security https://www.springframework.org/schema/security/spring-security.xsd
错误页面异常
SRVE0260E:服务器无法使用为应用程序指定的错误页面来处理下面打印的原始异常。
原始异常:
错误消息:javax.servlet.ServletException:Filter[springSecurityFilterChain]:无法初始化
错误代码:500
目标Servlet:main
错误堆栈:
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:文件[/opt/IBM/WebSphere/AppServer/profiles/********/installedApps/***********/*****.ear/*****.war/WEB-INF/classes/spring/spring security.xml]中的xml文档第8行无效;嵌套异常为org.xml.sax.SAXParseException:cvc复杂类型。2.4.c:匹配的通配符是严格的,但找不到元素“http”的声明。
在堆栈等
我已经调查这件事一个星期了,我想我已经试过了所有的嫌疑犯
- 我在Maven依赖项中使用相同版本(5.2.0)的所有Spring模块
- 我确实有spring安全配置作为依赖项
- 我已经检查了打包的应用程序。我的
包括我的.ear
,它在其.war
文件夹中依次包括WEB-INF/lib
spring security config.jar
springbean.xsd
和一个springsecurity.xsd
因为这个问题只存在于WebSphereApplicationServer上,所以我尝试先将classloader配置为使用本地类,以防spring的某些服务器端版本弄乱了我的软件。这对结果没有任何影响
下面是我的spring security.xml
config文件的样子:
任何帮助都将不胜感激。在Spring Security 5.2.0版中,Spring Security config.jar/META-INF/Spring.schemas中描述的XSD模式转换如下:
https\://www.springframework.org/schema/security/spring-security.xsd=org/springframework/security/config/spring-security-5.2.xsd
https\://www.springframework.org/schema/security/spring-security-5.2.xsd=org/springframework/security/config/spring-security-5.2.xsd
http\://www.springframework.org/schema/security/spring-security-5.1.xsd=org/springframework/security/config/spring-security-5.1.xsd
...
http://www.springframework.org/schema/security https://www.springframework.org/schema/security/spring-security.xsd
新模式和无版本指针现在只能通过HTTPS寻址
我的问题的解决方案是将我的所有架构位置设置为如下所示:
https\://www.springframework.org/schema/security/spring-security.xsd=org/springframework/security/config/spring-security-5.2.xsd
https\://www.springframework.org/schema/security/spring-security-5.2.xsd=org/springframework/security/config/spring-security-5.2.xsd
http\://www.springframework.org/schema/security/spring-security-5.1.xsd=org/springframework/security/config/spring-security-5.1.xsd
...
http://www.springframework.org/schema/security https://www.springframework.org/schema/security/spring-security.xsd
第二部分指向一个https
协议URL
这一点在随后的SpringSecurity版本中也有描述并得到了解决,但我花了一周时间才弄明白其中的微妙之处