2017-05-21 2 views
0

J'implémente Spring SAML dans mon application web qui a déjà implémenté la sécurité de printemps, grâce à laquelle j'ai maintenant 2 gestionnaires d'authentification. Comme le ressort se réfère toujours au dernier authenticationManager déclaré, j'ai trouvé la solution pour définir un authenticationManager comme un bean.Comment écrire authenticationManager en tant que bean (Conversion de SamlAuthenticationManager en bean)

suivante a été mon AuthenticationManager avant la conversion en haricot:

<authentication-manager alias="samlAuthenticationManager"> 
    <!-- Register authentication manager for SAML provider --> 
    <authentication-provider ref="samlAuthenticationProvider"/> 
    <!-- Register authentication manager for administration UI --> 
    <authentication-provider> 
     <user-service id="adminInterfaceService"> 
      <user name="admin" password="admin" authorities="ROLE_ADMIN"/> 
     </user-service> 
    </authentication-provider> 
</authentication-manager> 

Après mon code après la conversion de haricot:

<beans:bean id="samlAuthenticationManager" class="org.springframework.security.authentication.ProviderManager"> 
    <beans:constructor-arg> 
     <beans:list> 
      <beans:bean class="org.springframework.security.saml.SAMLAuthenticationProvider"> 
       <beans:property name="userDetails" value="adminInterfaceService"/> 
      </beans:bean> 
     </beans:list> 
    </beans:constructor-arg> 
</beans:bean> 
<user-service id="adminInterfaceService"> 
    <user name="admin" password="admin" authorities="ROLE_ADMIN"/> 
</user-service> 

Le fournisseur d'authentification est définit comme suit:

<beans:bean id="samlAuthenticationProvider" class="org.springframework.security.saml.SAMLAuthenticationProvider"> 
     <!-- OPTIONAL property: can be used to store/load user data after login --> 
     <!-- 
     <beans:property name="userDetails" ref="bean" /> 
     --> 
</beans:bean> 

Je reçois l'exception suivante:

Impossible de convertir la valeur de type 'java.lang.String' au type requis 'org.springframework.security.saml.userdetails.SAMLUserDetailsService' propriété 'userDetails'

S'il vous plaît aider en ce qui concerne la même. Je serai très obligé.

Merci à l'avance

Répondre

0

trouvé la solution ici https://github.com/spring-projects/spring-security/issues/2163

juste eu à utiliser id au lieu d'alias à la fois l'authentification gestionnaire

Vous ne devriez pas avoir besoin d'utiliser les haricots printemps . Si vous ne spécifiez pas d'ID, , vous remplacerez l'instance "par défaut". C'est à peu près la façon dont fonctionnent les haricots de printemps standard. Dans le thread référencé, l'utilisateur est spécifiant un alias, plutôt qu'un ID, de sorte que ne crée pas une instance distincte . Encore une fois, c'est comme ça que fonctionnent les instances de bean normales, donc Je ne suis pas sûr que nous devrions dévier de ça.