2014-10-29 236 views
1

我正在嘗試使用Spring安全衛士,並且我主要是想通了,但在嘗試了很長時間之後,我無法修復此錯誤。當我登錄我有這樣的錯誤:spring security java.lang.AbstractMethodError

exception 
    javax.servlet.ServletException: Filter execution threw an exception 


    root cause 
java.lang.AbstractMethodError 
    at javax.servlet.http.HttpServletRequestWrapper.changeSessionId(HttpServletRequestWrapper.java:290) 
    at javax.servlet.http.HttpServletRequestWrapper.changeSessionId(HttpServletRequestWrapper.java:290) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:196) 
    at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:181) 
    at org.springframework.security.web.authentication.session.ChangeSessionIdAuthenticationStrategy.applySessionFixation(ChangeSessionIdAuthenticationStrategy.java:48) 
    at org.springframework.security.web.authentication.session.AbstractSessionFixationProtectionStrategy.onAuthentication(AbstractSessionFixationProtectionStrategy.java:82) 
    at org.springframework.security.web.authentication.session.ChangeSessionIdAuthenticationStrategy.onAuthentication(ChangeSessionIdAuthenticationStrategy.java:32) 
    at org.springframework.security.web.authentication.session.CompositeSessionAuthenticationStrategy.onAuthentication(CompositeSessionAuthenticationStrategy.java:83) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:216) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:744) 

我不知道到底是什麼在代碼編寫,這是我有:

<properties> 
      <spring.version>3.2.5.RELEASE</spring.version> 
     </properties> 
    <dependencies> 
      <dependency> 
       <groupId>myfaces</groupId> 
       <artifactId>myfaces</artifactId> 
       <version>1.0.9</version> 
      </dependency> 
      <dependency> 
       <groupId>org.springframework.security</groupId> 
       <artifactId>spring-security-config</artifactId> 
       <version>${spring.version}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.springframework.security</groupId> 
       <artifactId>spring-security-web</artifactId> 
       <version>${spring.version}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-orm</artifactId> 
       <version>${spring.version}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-jdbc</artifactId> 
       <version>${spring.version}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-web</artifactId> 
       <version>${spring.version}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-webmvc</artifactId> 
       <version>${spring.version}</version> 
      </dependency> 
      <dependency> 
       <groupId>javax.servlet</groupId> 
       <artifactId>jstl</artifactId> 
       <version>1.1.2</version> 
      </dependency> 
      <dependency> 
       <groupId>javax.inject</groupId> 
       <artifactId>javax.inject</artifactId> 
       <version>1</version> 
      </dependency> 
      <dependency> 
       <groupId>taglibs</groupId> 
       <artifactId>standard</artifactId> 
       <version>1.1.2</version> 
      </dependency> 
      <dependency> 
       <groupId>javax.servlet</groupId> 
       <artifactId>servlet-api</artifactId> 
       <version>2.5</version> 
       <scope>provided</scope> 
      </dependency> 
      <dependency> 
       <groupId>log4j</groupId> 
       <artifactId>log4j</artifactId> 
       <version>1.2.17</version> 
       <exclusions> 
        <exclusion> 
         <groupId>com.sun.jdmk</groupId> 
         <artifactId>jmxtools</artifactId> 
        </exclusion> 
        <exclusion> 
         <groupId>com.sun.jmx</groupId> 
         <artifactId>jmxri</artifactId> 
        </exclusion> 
       </exclusions> 
      </dependency> 
      <dependency> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-log4j12</artifactId> 
       <version>1.5.6</version> 
      </dependency> 
      <dependency> 
       <groupId>org.hibernate</groupId> 
       <artifactId>ejb3-persistence</artifactId> 
       <version>1.0.1.GA</version> 
      </dependency> 
      <dependency> 
       <groupId>org.hibernate</groupId> 
       <artifactId>hibernate-annotations</artifactId> 
       <version>3.3.1.GA</version> 
      </dependency> 
      <dependency> 
       <groupId>commons-dbcp</groupId> 
       <artifactId>commons-dbcp</artifactId> 
       <version>1.4</version> 
      </dependency> 
      <dependency> 
       <groupId>org.aspectj</groupId> 
       <artifactId>aspectjweaver</artifactId> 
       <version>1.6.11</version> 
      </dependency> 
      <dependency> 
       <groupId>cglib</groupId> 
       <artifactId>cglib</artifactId> 
       <version>2.2</version> 
      </dependency> 
      <dependency> 
       <groupId>javax</groupId> 
       <artifactId>javaee-web-api</artifactId> 
       <version>6.0</version> 
      </dependency> 
      <dependency> 
       <groupId>javax</groupId> 
       <artifactId>javaee-api</artifactId> 
       <version>6.0</version> 
      </dependency> 
      <dependency> 
       <groupId>mysql</groupId> 
       <artifactId>mysql-connector-java</artifactId> 
       <version>5.1.6</version> 
      </dependency> 
     </dependencies> 

<!--         Spring Security  --> 
    <security:http auto-config="true" use-expressions="true" 
      access-denied-page="/acsesDenied.jsp"> 
     <security:form-login login-page="/login.jsp" 
      login-processing-url="/login" username-parameter="username" 
      password-parameter="password" default-target-url="/welcome.form" 
      always-use-default-target="true" authentication-failure-url="/login.jsp?error=invalidLogin"/> 

     <security:intercept-url pattern="/welcome.form" access="isAuthenticated"/> 

     <security:logout logout-url="/logout"/> 
     <security:remember-me user-service-ref="userService" key="q_key"/> 
    </security:http> 

    <security:authentication-manager> 
     <security:authentication-provider user-service-ref="userService"> 
      <security:password-encoder ref="passwordHncoder"/> 
     </security:authentication-provider> 
    </security:authentication-manager> 

    <bean id="roleVoter" class="org.springframework.security.access.vote.RoleVoter"> 
     <property name="rolePrefix" value=""/> 
    </bean> 
+0

你可以修復stacktrace。沒有AbstractMethodError可見。 – DiogoSantana 2014-10-30 00:10:00

+0

對不起,沒有複製全部,更新stacktrace – 2014-10-30 07:13:17

+1

它開始工作後,我清除了Tomcat中的Lib文件夾 – 2014-11-01 06:38:05

回答

1

您似乎有Servlet API的版本衝突。

這些都是不好的依賴關係:

<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-web-api</artifactId> 
    <version>6.0</version> 
</dependency> 
<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-api</artifactId> 
    <version>6.0</version> 
</dependency> 

servlet容器(如Tomcat)包括一個版本Servlet API的,但上面的依賴關係包括給他們,一個相當老的版本。嘗試刪除這些依賴關係。如果您編譯過程中需要它們,您可以設置爲提供:

<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-api</artifactId> 
    <version>6.0</version> 
    <scope>provided</scope> 
</dependency> 
+0

我有同樣的問題,原因是tomcat/lib文件夾內的javaee-api.jar。刪除,解決了這個問題。 – JSeven 2016-10-19 18:52:03

0

不知道這是否會幫助任何人(這是不是一個解決辦法,但也許可以作爲線索),但我面臨着同樣的在嵌入式tomcat容器中運行應用程序時出現問題。在將相同的應用程序部署到獨立的tomcat容器中時,問題就消失了。嵌入式的Tomcat,Maven插件:

<groupId>org.apache.tomcat.maven</groupId> 
<artifactId>tomcat7-maven-plugin</artifactId> 
<version>2.2</version> 

單機版本的Tomcat:

Server version: Apache Tomcat/7.0.53 
Server built: Mar 25 2014 06:20:16 
Server number: 7.0.53.0 
OS Name:  Linux 

仍試圖找出潛在的問題。

0

我遇到了同樣的問題,並找到了解決方案。這是由於javax.servlet.api.jar是在Spring.starter.security依賴關係之前通過POM.XML中的一些其他依賴項導入的。查找依賴關係和add

<exclusion> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
</exclusion> 

然後在spring-boot-starter-security依賴關係之後添加下面的依賴關係。

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <scope>provided</scope> 
</dependency> 
+0

在做其他建議之前試試這個嗎? – tamil 2017-11-07 07:32:43