zl程序教程

您现在的位置是:首页 >  后端

当前栏目

spring security3.24后applicationContext-security.xml中schema配置出错解决方法

Spring配置方法XML 解决 Security 出错 Schema
2023-09-27 14:29:21 时间

   我在以前的一个老项目中使用的spring security的版本是spring-core-3.0.1.RELEASE.jar,其他的相关依赖的包也是这个版本的,但在我在新的项目中把包的版本升级成了3.24的;使用的配置文件还是用原来3.01的applicationContext-security.xml-old。

 spring.version 3.2.4.RELEASE /spring.version 

 spring.security.version 3.2.4.RELEASE /spring.security.version 
applicationContext-security.xml  --old 版本是3.0.1

 ?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" 

 xmlns:p="http://www.springframework.org/schema/p" 

 xmlns:util="http://www.springframework.org/schema/util"

 xsi:schemaLocation="http://www.springframework.org/schema/beans 

 http://www.springframework.org/schema/beans/spring-beans-3.1.xsd

 http://www.springframework.org/schema/security 

 http://www.springframework.org/schema/security/spring-security-3.1.xsd

 http://www.springframework.org/schema/util 

 http://www.springframework.org/schema/util/spring-util-3.1.xsd" 
上面我只写出了schema的约束,但是问题出现了,在新的项目部署到服务器时报如下错误了,


严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener

org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: You cannot use a spring-security-2.0.xsd or spring-security-3.0.xsd or spring-security-3.1.xsd schema with Spring Security 3.2. Please update your schema declarations to the 3.2 schema.

Offending resource: URL [file:/D:/apache-tomcat-6.0.32/webapps/Fileserver/WEB-INF/classes/applicationContext-security.xml]

 at org.springframework.beans.factory.parsing.FailFastProblemReporter.fatal(FailFastProblemReporter.java:59)

 at org.springframework.beans.factory.parsing.ReaderContext.fatal(ReaderContext.java:68)

 at org.springframework.beans.factory.parsing.ReaderContext.fatal(ReaderContext.java:55)

 at org.springframework.security.config.SecurityNamespaceHandler.parse(SecurityNamespaceHandler.java:84)

 at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1438)

 at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1428)

 at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:185)

 at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:139)

 at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:108)

 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)

 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)

 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)

 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)

 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)

 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)

 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)

 at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)

 at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)

 at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)

 at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537)

 at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451)

 at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389)

 at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294)

 at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)

 at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4205)

 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4704)

 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)

 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)

 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)

 at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079)

 at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)

 at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)

 at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1315)

 at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)

 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)

 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1061)

 at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)

 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)

 at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)

 at org.apache.catalina.core.StandardService.start(StandardService.java:525)

 at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)

 at org.apache.catalina.startup.Catalina.start(Catalina.java:595)

 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

 at java.lang.reflect.Method.invoke(Method.java:597)

 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)

 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
上面中错误提到一句很关键的


You cannot use a spring-security-2.0.xsd or spring-security-3.0.xsd or spring-security-3.1.xsd schema with Spring Security 3.2. Please update your schema declarations to the 3.2 schema


也就是说我需要把我的schema升级成 3.2 以上的版本,

然后我在官方网站找到一个最新的一个配置文件:修改成如下就ok了

官方的配置实例


applicationContext-security.xml  --new 版本是3.2.4 :


 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.xsd" 

 http 

 intercept-url pattern="/**" access="ROLE_USER" / 

 form-login / 

 logout / 

 /http 
这样就解决了。


然后额外说一下:在上面错误的同时也会报

java.lang.IllegalStateException: BeanFactory not initialized or already closed - call refresh before accessing beans via the ApplicationContext。


其实大部分情况就是配置文件不多造成的,


等会 我把完整的项目贴到这儿:





Spring 代理 Bean 中获取不到原始 Bean 对象注解的解决方法 我在接受 mq 消息的时候,需要做一个重试次数限制,如果超过 maxNum 就发邮件告警,不再重试。 所以我需要对 consumer 对象进行代理,然后如果超过异常次数,我直接返回成功,并且发送成功消息,但是我获取 consumer handler 方法的方式是通过 method.getAnnotation(XXClient.class) 方式,那么就会返回 null。
稳定性专题 | Spring Boot 常见错误及解决方法 『StabilityGuide』是阿里多位阿里技术工程师共同发起的稳定性领域的知识库开源项目,涵盖性能压测、故障演练、JVM、应用容器、服务框架、流量调度、监控、诊断等多个技术领域,以更结构化的方式来打造稳定性领域的知识库,欢迎您的加入。
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载