СЕРЬЕЗНЫЙ: исключение springSecurityFilterChain ClassCastException DelegatingFilterProxy не может быть приведено

может ли кто-нибудь помочь мне решить мою ошибку запуска 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)

person user987027    schedule 10.10.2011    source источник


Ответы (5)


Одна из ваших зависимостей включает servlet-api в ваш военный файл, который вызывает такое поведение. Используя 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>

Вам нужно сделать это и для других servlet-api (например, org.mortbay.jetty:servlet-api, ..).

person rosencreuz    schedule 05.11.2012

Я мог бы исправить это, удалив servlet-api.jar из моей сборки развертывания (в eclipse)

my-web-project-> свойства -> Сборка развертывания

и удаление его. Другие заявляют, что в проектах maven область зависимости servlet-api должна быть установлена ​​​​на «при условии».

person rebouny    schedule 14.10.2011

У меня возникла аналогичная проблема, когда я добавил зависимость для CXF. Я попробовал рекомендуемый выше способ исключения javax.servlet из этой зависимости, но это не сработало, но добавление предоставленного решило это. Это может быть другой случай для вас, но стоит попробовать.

<dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-bundle-jaxrs</artifactId>
        <version>2.2.9</version>
        <scope>provided</scope>
    </dependency>

Если я ответил на ваш вопрос, пожалуйста, отметьте это так. ;)

person Rose    schedule 23.08.2014

Аналогичная проблема была решена путем исключения 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 содержали найденную ошибку ua, просканировав каждый файл jar в папке WEB-INF/lib на предмет содержащихся в нем классов. т.е.

jar tvf <jar-file>
person sweetfa    schedule 28.04.2016

наверное в web.xml вы настраиваете

<servlet>
    <servlet-name>springSecurityFilterChain</servlet-name>
    <servlet-class>org.springframework.web.filter.DelegatingFilterProxy</servlet-class>
</servlet>

но это фильтр. поэтому измените сервлет как фильтр.

person sudeep biswas    schedule 14.09.2016