2011-10-10 98 views
6

誰能幫我解決我的tomcat運行的錯誤,我得到以下錯誤,當我運行Tomcat:嚴重:異常springSecurityFilterChain ... ... ClassCastException異常的DelegatingFilterProxy無法施展

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) 

回答

3

我可以解決這個問題從我的部署組件移除servlet的api.jar文件(在eclipse)

MY-web的項目 - >屬性 - >部署總成

和刪除它。其他人聲明,在Maven項目中,servlet-api依賴項的範圍必須設置爲'provided'

9

您的一個依賴包括將servlet-api包含到導致該行爲的war文件中。使用mvn依賴關係:樹,你可以找出你的依賴關係是哪一個。之後,你需要排除的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,..)爲好。

1

當我添加CXF的依賴關係時,我遇到了類似的問題。我嘗試了上面推薦的從該依賴項中排除javax.servlet的方法,但它不起作用 - 但添加提供瞭解決方案。 它可能是一個不同的情況,但值得一試。

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

如果我回答了你的問題,請註明它如此。 ;)

0

通過排除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文件夾爲它含有的類中發現的錯誤UAS。即

jar tvf <jar-file> 
0

可能在web.xml配置

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

,但它是過濾器。所以將servlet改爲過濾器。