Spring Security: Как я могу получить доступ к SessionRegistry внутри пользовательского UserDetailsService?
Я получаю следующее сообщение об ошибке
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type [org.springframework.security.core.session.SessionRegistry]
found for dependency: expected at least 1 bean which qualifies as autowire
candidate for this dependency. Dependency annotations:
{@org.springframework.beans.factory.annotation.Autowired(required=true)}
с учетом следующей настройки Spring Security 4:
Конфигурация безопасности Spring:
...
<x509 subject-principal-regex="CN=(.*?)," user-service-ref="userDetailsService" />
...
<custom-filter ref="concurrencyFilter" after="CONCURRENT_SESSION_FILTER" />
<session-management>
<concurrency-control max-sessions="1"
error-if-maximum-exceeded="true"
session-registry-ref="sessionRegistry" />
</session-management>
<beans:bean id="concurrencyFilter"
class="org.springframework.security.web.session.ConcurrentSessionFilter">
<beans:property name="sessionRegistry" ref="sessionRegistry"/>
<beans:property name="expiredUrl" value="/logout" />
</beans:bean>
<beans:bean id="sessionRegistry"
class="org.springframework.security.core.session.SessionRegistryImpl" />
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="userDetailsService" />
</authentication-manager>
...
Пользовательский UserDetailsService:
...
@Service("userDetailsService")
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private SessionRegistryImpl sessionRegistry;
...
}
Любая идея, почему SessionRegistryImpl
не может быть введен в мой обычай UserDetailsService
? Я пробовал различные перестановки, например session-registry-alias
вместо session-registry-ref
, а также @Resource(name="sessionRegistry")
вместо @Autowired
и т. д., но никто не работал для меня. Я застрял, и любая помощь будет принята с благодарностью!