Estoy intentando implementar lo siguiente, pero mi instancia de authenticationManager arroja la excepción a continuación y no está autoconectada. ¿Cómo obtengo una instancia de Spring de forma manual? No estoy usando un controlador de primavera, estoy usando un bean con ámbito de solicitud JSF. Obtengo la siguiente excepción en tiempo de ejecución cuando el contenedor intenta autoaumentar el authenticationManager. El requestCache viene bien. No entiendo por qué tengo dos casos ...Obtener instancia de AuthenticationManager manualmente
config:
<authentication-manager>
<authentication-provider user-service-ref="userManager">
<password-encoder ref="passwordEncoder" />
</authentication-provider>
</authentication-manager>
La inyección de dependencias autowired fallado; la excepción anidada es org.springframework.beans.factory.BeanCreationException: no se pudo autocausar el campo: protected org.springframework.security.authentication.AuthenticationManager com.dc.web.actions.SignUpDetail.authenticationManager; la excepción anidada es org.springframework.beans.factory.NoSuchBeanDefinitionException: no se define ningún bean único de tipo [org.springframework.security.authentication.AuthenticationManager]: bean de coincidencia única esperada pero se encontró 2: [org.springframework.security.authentication.ProviderManager # 0, org.springframework.security.authenticationManager] javax.faces.webapp.FacesServlet.service (FacesServlet.java:325)
@Controller
public class SignupController
{
@Autowired
RequestCache requestCache;
@Autowired
protected AuthenticationManager authenticationManager;
@RequestMapping(value = "/account/signup/", method = RequestMethod.POST)
public String createNewUser(@ModelAttribute("user") User user, BindingResult result, HttpServletRequest request, HttpServletResponse response)
{
//After successfully Creating user
authenticateUserAndSetSession(user, request);
return "redirect:/home/";
}
private void authenticateUserAndSetSession(User user,
HttpServletRequest request)
{
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
user.getUsername(), user.getPassword());
// generate session if one doesn't exist
request.getSession();
token.setDetails(new WebAuthenticationDetails(request));
Authentication authenticatedUser = authenticationManager.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(authenticatedUser);
}
}
¿Está diciendo que el campo 'authenticationManager' es nulo? ¿Está 'requestCache' conectado correctamente? – skaffman
@skaffman gracias por la respuesta, actualicé un poco mis preguntas con más información. Lo que publiqué antes no era correcto, no es nulo. El contenedor dice que tengo dos instancias de authenticationManager pero no veo cómo. Pegué mi configuración también, alguna idea? Solo estoy tratando de hacer un inicio de sesión automático después de un registro exitoso. ¿Debo usar mi userManager para iniciar sesión automáticamente? userManager no tiene un método que tome un UsernamePasswordAuthenticationToken – c12