添加Spring Security依赖后Tomcat启动失败,求解决方案
我在pom.xml中添加Spring Security依赖后,Tomcat无法正常运行,控制台输出以下报错信息:
GRAVE: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/sagemcom]] at java.util.concurrent.FutureTask.report(Unknown Source) at java.util.concurrent.FutureTask.get(Unknown Source) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:941) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1421) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1411) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/sagemcom]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) ... 6 more Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@7f4bcad4] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4907) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5042) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 6 more Caused by: org.apache.catalina.LifecycleException: Failed to initialize component [org.apache.catalina.webresources.JarResourceSet@c4a7383] at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:112) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140) at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:724) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 9 more Caused by: java.lang.IllegalArgumentException: java.util.zip.ZipException: invalid LOC header (bad signature) at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:142) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107) ... 12 more Caused by: java.util.zip.ZipException: invalid LOC header (bad signature) at java.util.zip.ZipFile.read(Native Method) at java.util.zip.ZipFile.access$1400(Unknown Source) at java.util.zip.ZipFile$ZipFileInputStream.read(Unknown Source) at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(Unknown Source) at java.util.zip.InflaterInputStream.read(Unknown Source) at sun.misc.IOUtils.readFully(Unknown Source) at java.util.jar.JarFile.getBytes(Unknown Source) at java.util.jar.JarFile.getManifestFromReference(Unknown Source) at java.util.jar.JarFile.getManifest(Unknown Source) at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:140) ... 13 more
移除该依赖后Tomcat可正常运行,且我已在web.xml中配置了过滤器,请问该如何解决这个问题?
可能的解决方案
清理并重新下载损坏的依赖包:这个报错
invalid LOC header (bad signature)最常见的原因是Maven本地仓库中的Spring Security相关jar包损坏或不完整。你可以找到本地仓库中Spring Security的目录(比如Windows下是C:\Users\你的用户名\.m2\repository\org\springframework\security,Linux/Mac下是~/.m2/repository/org/springframework/security),删除整个目录,然后执行mvn clean install命令让Maven重新下载完整的依赖包。检查依赖版本兼容性:确保Spring Security的版本和项目中其他Spring组件(比如Spring Core、Spring Web等)的版本保持一致。例如,如果你的项目使用Spring 5.3.x,那么Spring Security也应该选择5.3.x的对应版本,避免版本不匹配导致的依赖冲突或加载异常。
清理Tomcat缓存:Tomcat的
work和temp目录可能残留了损坏的jar包缓存。找到Tomcat安装目录下的work/Catalina/localhost/你的项目名文件夹,以及temp目录,删除里面的所有内容,然后重启Tomcat尝试启动。验证web.xml中的过滤器配置:虽然你已经配置了过滤器,但可以再检查一下Spring Security过滤器的配置是否正确。确保过滤器类路径是
org.springframework.security.web.FilterChainProxy,并且<url-pattern>的配置符合你的项目需求,避免重复配置或路径错误导致的加载问题。
内容的提问来源于stack exchange,提问作者farouk




