문제

스프링 3.0.0.m4에서 3.0.0.rc1에서 업그레이드 한 후 Spring Security 3.0.0.m2 ~ 3.0.0.rc1을 사용해야합니다. M4/M2에 익숙합니다. 나는 그것을 정의하는 데 최선을 다했고, 이것으로 끝났습니다.

<security:authentication-manager alias="authenticationManager">
  <security:authentication-provider user-service-ref="userService">
    <security:password-encoder hash="plaintext"/>
  </security:authentication-provider>
</security:authentication-manager>

내 단위 테스트를 한 번에 하나씩 테스트 할 때, 이것은 훌륭하게 작동하며, 대부분의 AJAX 요청에 대해서도 잘 작동하지만 무작위로 겉보기에는 데이터베이스 세션이 작업 중간에 폐쇄되는 것처럼 보이는 트랜잭션에서 이상한 오류가 발생합니다. 이러한 오류를 유발할 수있는 방법은 동일한 클라이언트의 다른 컨트롤러에 많은 다른 AJAX 요청을 보내는 것입니다. 그러면 그 중 하나 이상이 무작위로 실패합니다. 다음에 시도 할 때, 하나는 작동하고 다른 하나는 실패 할 것입니다.

오류는 내 userdao에서 가장 자주 발생하지만 다른 DAO에서도 자주 발생하며 예외에는 다음이 포함됩니다.

  • "java.sql.sqlexception : resultSet이 닫힌 후 허용되지 않음"
  • "org.hibernate.impl.abstractsessionimpl : errorifclosed () : 세션이 닫힙니다!"
  • "com.mysql.jdbc.preparedstatement.fillsendpacket (preparedstatement.java:2439)의 java.lang.nullpointerexception"
  • "java.util.concurrentModificationException at java.util.linkedhashmap $ linkedhashiterator.nextentry (알 수없는 출처)"
  • "org.hibernate.lazyinitializationException : 로딩 컬렉션에 대한 불법 액세스"
  • 등...

전에는 _authenticationManager Bean을 정의했으며 동일한 요청이 그 매력처럼 작동했습니다. 그러나 RC1을 사용하면 더 이상 정의 할 수 없습니다. 예전에는 다음과 같이 보였습니다.

<bean id="_authenticationManager" class="org.springframework.security.authentication.ProviderManager">
  <property name="providers">
    <list>
      <bean class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
        <property name="userDetailsService" ref="userService"/>
        <property name="passwordEncoder">
          <bean class="org.springframework.security.authentication.encoding.PlaintextPasswordEncoder" />
        </property>
      </bean>
    </list>
  </property>
</bean>

내 보안을 정의 했습니까? Authentication-Manager가 동일한 클라이언트의 여러 요청에 대한 트랜잭션을 공유하도록 잘못된 상태로 정의 했습니까? 다르게 정의해야합니까, 아니면 다른 보안을 정의해야합니까?

내 데이터베이스 세션을 마무리하는 오해가있는 것이 있습니까? 내 머리에는 각 요청에는 자체 데이터베이스 연결 및 트랜잭션이 있습니다. 모든 게터와 세터는 동기화 된 메소드이므로 동시성 문제가 없어야합니다. UI가 요청하는 모든 REST 컨트롤러는 GET-Requests이며 읽기 전용 작업을 수행합니다. 내가 아는 한, 이러한 요청 중에 단일 삽입/업데이트/삭제가 수행되지 않으며 데이터베이스 로그를 검사하여이를 확인했습니다.

이러한 인종 조건을 피하는 방법에 대한 귀하의 제안을 듣기를 기대합니다.

건배

추신, 나는 문제가 보안에 관한 것이라는 점을 더 구체적으로 업데이트했다. 인증-관리자 (또는 당신이 다른 것이 될 수 있다는 팁이 있다면 나에게 보인다). M 3.0.0.rc1로 시작하는 내 자신의 _authenticationManager 대신 사용을 강요

pps, 여기에 _authenticationManager를 더 이상 정의 할 수 없다는 것을 이해하게 한 스레드가 있습니다. Springsource 포럼 게시물

도움이 되었습니까?

해결책

DAO에서 데이터베이스 세션 처리에서 큰 문제가있는 것 같습니다. 내 문제를 쓰고 STACKOVERFLOW에서 다른 스레드에 솔루션을 게시했습니다. 해결책에 대한 사람들의 의견을 요청했습니다. 나는 그것이 더 많은 문제를주지 않기를 바랍니다 :-)

건배

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top