2014-10-29 2 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

+0

Извините, не заметил, что не скопировал все, обновил stacktrace –

+1

начал работать после того, как я очистил папку Lib в Tomcat –

ответ

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> 

сервлет контейнер (например, Tomcat) включает в себя версию Servlet API, но зависимости выше, включает их, и с довольно старой версии. Попробуйте удалить эти зависимости. Если вы нуждаетесь в них во время компиляции, вы можете установить, как это предусмотрено:

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

У меня была такая же проблема, и причиной была javaee-api.jar внутри папки tomcat/lib. Удаление этого исправлено. – JSeven

0

Не уверен, если это будет помогать всем (это не является решением, но, возможно, может служить в качестве ключа), но я столкнулся с той же проблемы при запуске приложения во встроенном контейнере tomcat. При развертывании одного и того же приложения в автономном контейнере tomcat проблема исчезла. Встроенный кот, Maven плагин:

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

Автономной версия кот:

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 импортируется некоторыми другими зависимостями в вашем POM.XML до зависимостей spring.starter.security. Обратите внимание, что зависимость и add

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

Затем добавьте эту зависимость ниже после зависимостей безопасности весны-загрузчика-стартера.

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

Попробуйте это, прежде чем делать другие предложения? – tamil

Смежные вопросы