spring security 3配置ACL时报java.lang.NoSuchMethodError: net.sf.ehcache.Cache.<init>

本文解决了一个关于Spring Security与Ehcache版本不兼容的问题,详细介绍了错误信息及原因,并给出了具体的解决办法,即更换Ehcache版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'aclCache' defined in ServletContext resource [/WEB-INF/applicationContext-security-acl.xml]: Cannot resolve reference to bean 'aclEhCache' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'aclEhCache' defined in ServletContext resource [/WEB-INF/applicationContext-security-acl.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: net.sf.ehcache.Cache.<init>(Ljava/lang/String;ILnet/sf/ehcache/store/MemoryStoreEvictionPolicy;ZLjava/lang/String;ZJJZJLnet/sf/ehcache/event/RegisteredEventListeners;Lnet/sf/ehcache/bootstrap/BootstrapCacheLoader;II)V
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:630)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:148)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4651)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5154)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5149)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'aclEhCache' defined in ServletContext resource [/WEB-INF/applicationContext-security-acl.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: net.sf.ehcache.Cache.<init>(Ljava/lang/String;ILnet/sf/ehcache/store/MemoryStoreEvictionPolicy;ZLjava/lang/String;ZJJZJLnet/sf/ehcache/event/RegisteredEventListeners;Lnet/sf/ehcache/bootstrap/BootstrapCacheLoader;II)V
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
    ... 25 more
Caused by: java.lang.NoSuchMethodError: net.sf.ehcache.Cache.<init>(Ljava/lang/String;ILnet/sf/ehcache/store/MemoryStoreEvictionPolicy;ZLjava/lang/String;ZJJZJLnet/sf/ehcache/event/RegisteredEventListeners;Lnet/sf/ehcache/bootstrap/BootstrapCacheLoader;II)V
    at org.springframework.cache.ehcache.EhCacheFactoryBean.createCache(EhCacheFactoryBean.java:324)
    at org.springframework.cache.ehcache.EhCacheFactoryBean.afterPropertiesSet(EhCacheFactoryBean.java:301)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
    ... 32 more


解决方法是:将项目里面的ehcache.jar的版本替换下,我用的是Spring security 3.0.5 ,ehcache的版本是ehcache-1.6.2.jar就解决了。。如果用ehcache-1.4.1.jar会出现其它的ClassNotFoundError。。请注意

ehcache-1.6.2.jar下载地址如下:

http://download.youkuaiyun.com/detail/steryzone/3602590

### JavaSpring框架出现的`NoSuchMethodError`错误解决方案 #### 错误原因分析 当遇到 `java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.<init>` 或者类似的 `ControllerAdviceBean.init` 方法找不到的情况时,通常是因为不同版本之间的依赖冲突所引起的。具体来说,在构建微服务项目并尝试启动Eureka服务器或其他服务组件时报此错误表明存在类路径下的库文件版本不匹配问题[^1]。 对于特定于 `ControllerAdviceBean.init` 的情况,虽然提供的参考资料未直接提及这一点,但从经验来看,这类问题是由于应用程序试图调用某个不存在的方法造成的。这可能是由于升级了某些依赖项而其他部分仍然指向旧版API的结果。 #### 解决方案概述 为了处理上述提到的各种形式的 `NoSuchMethodError` ,建议采取以下措施: - **确认依赖关系**:仔细检查项目的pom.xml或build.gradle配置文件中的所有依赖声明,特别是那些涉及Spring Boot和Spring Cloud的部分。确保它们之间相互兼容,并且遵循官方推荐的最佳实践组合表来选择合适的版本号[^5]。 - **清理缓存重新导入依赖**:有时候IDE内部可能存在过期的数据影响到实际编译过程。因此执行Maven/Gradle clean命令清除本地仓库里的临时资源后再同步一次最新的依赖列表是非常必要的操作之一。 - **更新至最新稳定发行版**:如果当前使用的是一些较早发布的软件包,则考虑迁移到更近期经过充分测试过的版本上往往能解决问题所在。不过需要注意的是迁移过程中可能涉及到接口变更等问题需提前做好准备。 ```xml <!-- Maven pom.xml 示例 --> <dependencyManagement> <dependencies> <!-- 使用与Spring Boot相适应的Spring Cloud版本 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR8</version><!-- 请根据实际情况调整 --> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 添加更多所需模块... --> </dependencies> ``` 通过以上手段应该能够有效地缓解乃至彻底消除由版本差异带来的此类运行时期间发生的异常状况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值