Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > JAVA
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-01-2016
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
¿Por qué el mapper de Mybatis me regresa un null usándolo en Spring Security?

Tengo un proyecto basado en Spring MVC, Spring-Security y MyBatis. Usando autenticación personalizada para poder hacer algunas cosas adicionales cree una clase que implementa la interfaz UserDetailsService de Security. Todo me funciona bien si hago ahí la autenticación de manera manual, es decir, si forzo a que el usuario y passw devuelto sea válido todo funciona bien. Así que la clase está bien estructurada, sin embargo si trato de usar un mapper de MyBatis para traer los datos de una BD parece que no se instancia la clase a pesar de que Spring si inyecta la misma al momento de crear el bean.

El código:
Código:
public class HermesUserService implements UserDetailsService {
	@Autowired
	private  UsersMapper maper;
	


	@Override
	public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
		//  Auto-generated method stub
		Users user= null;
		
		// Se trata de obtener el usuario desde la BD, si no existe se lanza exepción
		try{
		System.out.println(maper.toString());  // Aquí se produce una exepción porque maper no ha sido instanciado
		}
		catch (Exception e){
			e.printStackTrace();
			throw e;
		}
		System.out.println("usuario:" + userName);
		
        try{
        	
		  user = maper.selectByPrimaryKey(userName);
        }
        catch (Exception e){
        	e.printStackTrace();
        }

		if(user==null){
			System.out.println("No econtrado");
			throw new UsernameNotFoundException("Usuario/Password incorrecto");
		}
		System.out.println("SISS Pasoooooo");
        
		
		//Si existe, se obtienen los privilegios del usuario
		//TODO Obtener los privilegios desde la BD

		Collection<? extends GrantedAuthority> authorities = AuthorityUtils.createAuthorityList("SADMIN");
		return new User(user.getUsername(), user.getPassword(),authorities);
		
	}
Si utilizo el mismo maper, en un controlador, ahí si se instancía correctamente. Sospecho que es alguna cosa de Spring porque UsersMapper es solo una Interface, MyBatis se encarga de implementarla y devolver una clase funcional, pero por algún motivo aquí no lo hace.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #2  
Antiguo 26-01-2016
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Me contesto yo solo.

Ha quedado solucionado el problema. Lo que sucedía es que Spring no estaba inyectando ningún bean a la propiedad, si bien, durante la carga de los contextos de la aplicación si se creaban las instancias necesarias. El problema era el orden en que se estaban cargando los contextos y por ende creando los objetos. Lo único que había que hacer es forzar el orden de carga de los diferentes contextos para que el último en cargarse sea el contexto del servlet que usa Spring MVC. Esto lo indicamos en el archivo web.xml que es el que primero abre Spring. En mi caso quedó así:

Código:
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/root-context.xml
        /WEB-INF/jdbc-context.xml
        /WEB-INF/security-context.xml
        /WEB-INF/mvc-dispatcher-servlet.xml
        
    </param-value>
   </context-param>
De esta forma en root-context creo los beans que se usaran en el resto de los contextos y así sucesivamente. Lo que estaba sucediendo es que security-context se cargaba antes y aunque aparentemente hacia las inyecciones correctamente, no había instancias creadas que utilizar por lo que por lo que ví dejaba la dependencia en nulo.

Lo raro del asunto es que no se generaba ninguna excepción, o bueno si se genera pero la tenía que capturar yo mismo para poder saber siquiera que se estaba generando ya que si no lo hacía así al parecer alguna parte del framework se la estaba comiendo sin avisar siquiera.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Spring Framework, Runtime Packages y Plugins LoPiTaL OOP 2 31-10-2011 13:40:40
manual XML Mapper Delphi 7 Livey Conexión con bases de datos 1 21-12-2010 11:38:02
XML Mapper eflosten Varios 4 26-07-2010 09:52:40
XML Mapper angelholberg Internet 0 18-02-2009 20:07:26
cambiar campo null a not null andressanchez Firebird e Interbase 8 18-09-2006 22:00:09


La franja horaria es GMT +2. Ahora son las 16:29:08.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi