Je suis la mise en œuvre Se souvenir de moi au printemps security.And voici ma configurationsécurité Spring: ne peut pas résoudre la référence à grains lors de la définition argument du constructeur
<bean id="rememberMeServices"
class="com.spring.security.service.WMPersistentTokenBasedRememberMeServices">
<constructor-arg name="userDetailsService" ref="loginService"/>
<property name="tokenValiditySeconds" value="300"></property>
</bean>
<security:http auto-config="false" use-expressions="true" entry-point-ref="appAuthenticationEntryPoint">
<!-- Interceptor urls -->
<security:remember-me user-service-ref="#{rememberMeServices.getUserDetailsServiceInstance()}" token-repository-ref="#{rememberMeServices.getTokenRepository()}" />
</security:http>
Et mes WMPersistentTokenBasedRememberMeServices ressemble
public class WMPersistentTokenBasedRememberMeServices extends PersistentTokenBasedRememberMeServices {
private static final String key = "WM_APP_KEY";
private static final PersistentTokenRepository tokenRepository = new InMemoryTokenRepositoryImpl();
public WMPersistentTokenBasedRememberMeServices(UserDetailsService userDetailsService) {
super(key, userDetailsService, tokenRepository);
}
public PersistentTokenRepository getTokenRepository() {
return tokenRepository;
}
public UserDetailsService getUserDetailsServiceInstance()
{
return getUserDetailsService();
}
}
Mais quand Je déploie l'application avec la configuration ci-dessus, je suis getter ci-dessous l'erreur
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#61fc8560': Cannot resolve reference to bean 'org.springframework.security.web.authentication.rememberme.PersistentTokenBasedRememberMeServices#0' while setting bean property 'logoutHandlers' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.web.authentication.rememberme.PersistentTokenBasedRememberMeServices#0': Cannot resolve reference to bean '#{rememberMeServices.getTokenRepository()}' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinition
Exception: No bean named 'org.springframework.sec[email protected]2a13c5e' is defined
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.web.authentication.rememberme.PersistentTokenBasedRememberMeServices#0': Cannot resolve reference to bean '#{rememberMeServices.getTokenRepository()}' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'org.springframework.sec[email protected]2a13c5e' is defined
Lorsque je supprimer en utilisant le langage d'expression de printemps dans
<security:remember-me ...>
tag
et de fournir par exemple ref utilisateur valide, il fonctionne très bien.
Mais quand j'utilise le langage d'expression de ressort il échoue avec l'erreur ci-dessus. Je doute avec l'ordre de la création de bean.
Quelqu'un ayant une idée à propos de cette erreur?
Même après avoir effectué les modifications que vous avez suggérées, l'erreur est toujours présente. Impossible de résoudre la référence à bean '# {rememberMeServices.getTokenRepository()}' lors de la définition de l'argument constructeur; l'exception imbriquée est org.springframework.beans.factory.NoSuchBeanDefinitionException: aucun bean nommé 'org.springframework.sec[email protected]4d19bf23'. Les haricots sont en train de créer et autowiring fine.My seule préoccupation est le langage d'expression ne résout pas dans la balise de sécurité de printemps. –