#tomcat #classcastexception
#tomcat #classcastexception
Вопрос:
кто-нибудь может помочь мне устранить мою ошибку при запуске tomcat, я получаю следующую ошибку при запуске tomcat:
SEVERE: Exception starting filter springSecurityFilterChain
java.lang.ClassCastException: org.springframework.web.filter.DelegatingFilterProxy cannot be cast to javax.servlet.Filter
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4001)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4651)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
at org.apache.catalina.startup.Embedded.start(Embedded.java:825)
at org.codehaus.mojo.tomcat.AbstractRunMojo.startContainer(AbstractRunMojo.java:533)
at org.codehaus.mojo.tomcat.AbstractRunMojo.execute(AbstractRunMojo.java:239)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
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.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Ответ №1:
Одной из ваших зависимостей является включение servlet-api в ваш war-файл, который вызывает такое поведение. Используя mvn dependency:tree, вы можете узнать, какая из ваших зависимостей такова. После этого вам необходимо исключить servlet-api следующим образом:
<dependency>
<groupId>[VALUE]</groupId>
<artifactId>[VALUE]</artifactId>
<version>[VALUE]</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
Вам нужно сделать это для других API-интерфейсов сервлетов (например, org.mortbay.jetty: servlet-api, ..) также.
Ответ №2:
Я мог бы исправить это, удалив servlet-api.jar из моей сборки развертывания (в eclipse)
мой-веб-проект-> свойства -> Сборка развертывания
и удалить его. Другие утверждают, что в проектах maven для области видимости зависимости servlet-api должно быть установлено значение «предоставлено»
Ответ №3:
У меня возникла аналогичная проблема, когда я добавил зависимость для CXF. Я попробовал рекомендованный выше способ исключения javax.servlet из этой зависимости, но это не сработало, но добавление предоставленного решило проблему. Для вас это может быть другой случай, но стоит попробовать.
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-bundle-jaxrs</artifactId>
<version>2.2.9</version>
<scope>provided</scope>
</dependency>
Если я ответил на ваш вопрос, пожалуйста, отметьте его так. 😉
Ответ №4:
Аналогичная проблема была решена путем исключения geronimo.
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.0.3</version>
<exclusions>
<exclusion>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-servlet_2.5_spec</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-servlet_3.0_spec</artifactId>
</exclusion>
</exclusions>
</dependency>
Определите, какие файлы jar содержали обнаруженные uas ошибки, сканируя каждый файл jar в папке WEB-INF / lib на предмет содержащихся в нем классов. Т.е.
jar tvf <jar-file>
Ответ №5:
вероятно, в web.xml вы настраиваете
<servlet>
<servlet-name>springSecurityFilterChain</servlet-name>
<servlet-class>org.springframework.web.filter.DelegatingFilterProxy</servlet-class>
</servlet>
но это фильтр. поэтому измените сервлет в качестве фильтра.