Я пытаюсь реализовать нижеприведенный весенний автоматический вход в систему, но мой экземпляр authenticationManager выдает приведенное ниже исключение и не подключается автоматически. Как я могу получить экземпляр этого из Spring вручную? Я не использую пружинный контроллер, я использую bean-объект в области запросов JSF. Я получаю приведенное ниже исключение во время выполнения, когда контейнер пытается автоматически подключить аутентификациюManager. RequestCache поставляется в порядке. Должен ли я использовать метод в моей реализации UserDetailsService (userManager)? Я не вижу подходящего метода, предоставляемого UserDetailsService, который принимает объект UsernamePasswordAuthenticationToken. Есть идеи?
конфиг:
<http access-denied-page="/auth/denied.html">
<intercept-url
pattern="/**/*.xhtml"
access="ROLE_NONE_GETS_ACCESS" />
<intercept-url
pattern="/auth/**"
access="ROLE_ANONYMOUS,ROLE_USER" />
<intercept-url
pattern="/auth/*"
access="ROLE_ANONYMOUS" />
<intercept-url
pattern="/registered/*"
access="ROLE_USER" />
<intercept-url
pattern="/*"
access="ROLE_ANONYMOUS" />
<form-login
login-processing-url="/j_spring_security_check.html"
login-page="/auth/login.html"
default-target-url="/registered/home.html"
authentication-failure-url="/auth/login.html" />
<logout invalidate-session="true"
logout-success-url="/"
logout-url="/auth/logout.html"/>
<anonymous username="guest" granted-authority="ROLE_ANONYMOUS"/>
<remember-me user-service-ref="userManager" key="e37f4b31-0c45-11dd-bd0b-0800200c9a66"/>
</http>
<!-- Configure the authentication provider -->
<authentication-manager alias="am">
<authentication-provider user-service-ref="userManager">
<password-encoder ref="passwordEncoder" />
</authentication-provider>
</authentication-manager>
Исключение
Инъекция автосвязанных зависимостей не удалась; вложенное исключение: org.springframework.beans.factory.BeanCreationException: не удалось автоматически связать поле: protected org.springframework.security.authentication.AuthenticationManager com.dc.web.actions.SignUpDetail.authenticationManager; вложенным исключением является org.springframework.beans.factory.NoSuchBeanDefinitionException: не определен уникальный бин типа [org.springframework.security.authentication.AuthenticationManager]: ожидается один соответствующий бин, но найдено 2: [org.springframework.agerrovideranManager # 0, org.springframework.security.authenticationManager]
javax.faces.webapp.FacesServlet.service (FacesServlet.java:325)
@Named
@ Scope ( "запрос")
публичный класс Регистрация
{
@Inject
RequestCache requestCache;
@Inject
protected AuthenticationManager authenticationManager;
public String login(){
authenticateUserAndSetSession(utilities.getLoggedInUser(), (HttpServletRequest) FacesUtils.getExternalContext().getRequest());
return "/home.html";
}
private void authenticateUserAndSetSession(Users user,
HttpServletRequest request)
{
UserDetails details = userManager.loadUserByUsername(user.getUsername());
UsernamePasswordAuthenticationToken usernameAndPassword =
new UsernamePasswordAuthenticationToken(
user.getUsername(), "pwd", details.getAuthorities());
// Authenticate, just to be sure
Authentication auth = authenticationManager.authenticate(usernameAndPassword);
// Place the new Authentication object in the security context.
SecurityContextHolder.getContext().setAuthentication(auth);
}