2012-10-31 1 views

답변

1

하는 "기억 - 나", "사용자 서비스-REF"합니다 :

"remember-me 서비스 구현에는 UserDetailsService에 대한 액세스가 필요하므로 응용 프로그램에 정의 된 컨텍스트가 있어야합니다."

그러나 사용자의 경우 user-service-ref는 MyCustomAuthentication 유형의 bean에 대한 참조입니다. 이 때문에 "MyCustomAuthentication을 UserDetailsService로 캐스팅 할 수 없습니다."라는 ClassCastException이 발생합니다.

당신과 같이 정의한다 :

<security:user-service id="userDetailsService"> 
    <security:user name="username" password="pass" authorities="ROLE_USER" /> 
</security:user-service> 

을하고 "사용자 서비스-REF"

추신 :이 ID를 사용 당신이, 당신의 요구를 들어뿐만 아니라

HTH

당신의 인증 제공자를 해결해야 할 것이다 이럴 더 정확하게하기 :

 <http auto-config="true" use-expressions="true"> 
      ...  
      <remember-me user-service-ref="customUserDetailsManager"/> 
     </http> 




     <b:bean id="customUserDetailsManager" 
      class="com.something.something.MyCustomUserDetailsManager" /> 

     <authentication-manager> 
      <authentication-provider user-service-ref="customUserDetailsManager"> 
      </authentication-provider> 

     </authentication-manager> 



    </b:beans> 

주 MyCustomUserDetailsManager는

또 다른 중요한 점 UserDetailsManager

을 구현해야 (문서에서) :

pring의) 구현에는 UserDetailsService가 필요합니다. (예 : LDAP 공급자)의 UserDetailsService를 사용하지 않는 인증 공급자를 사용하는 경우 응용 프로그램 컨텍스트에 UserDetailsService 빈도 있어야 않으면 작동하지 않습니다.

+0

사용자 정의 인증 클래스를 계속 사용할 수 있습니다. 아직 userDetailsService를 정의하고 내가 보여준대로 장소를 참조해야합니다. 그렇지 않으면 봄부터 예외가 계속 발생합니다. – OhadR

+0

위의 예를 추가했습니다. 친절하고이 답변을 유용하다고 표시하십시오. – OhadR

+0

remember-me는 인증 공급자와 아무런 관련이 없습니다. 물론 자신의 공급자를 구현할 수 있으며 를 사용합니다. 그리고이 예에서 보여준 것과 똑같은 상태로 있습니다. – OhadR