SEVERE: исключение springSecurityFilterChain ... ClassCastException ... DelegatingFilterProxy не может быть приведен - PullRequest
6 голосов
/ 10 октября 2011

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

Ответы [ 5 ]

9 голосов
/ 05 ноября 2012

Одна из ваших зависимостей включает сервлет-API в ваш файл войны, который вызывает такое поведение. Используя mvn dependency: tree, вы можете узнать, какая у вас зависимость. После этого вам необходимо исключить сервлет-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, ..).

3 голосов
/ 14 октября 2011

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

my-web-project-> properties -> Deployment Assembly

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

1 голос
/ 23 августа 2014

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

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

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

0 голосов
/ 14 сентября 2016

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

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

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

0 голосов
/ 28 апреля 2016

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

jar tvf <jar-file>
...