Bienvenido a re-orientation! Esperamos que encuentres lo que buscas

Extendiendo Spring Security. La clase SecurityUser


Parte del manual paso a paso para desarrollar una aplicación web con Spring Framework + Spring Security contra una base de datos MySQL.

Una vez preparados los ficheros de configuración, queda trabajar en la creación del benas personalizado que hemos declarado CustomJdbcDaoImpl.

Pero antes, lo primero que vamos a hacer es crear los paquetes de la aplicación. Una manera de organizar las clases en un proyecto web es ir agrupando las clases que se crean por capas. A medida que vayamos avanzando en el proyecto iremos organizandonos siguiendo una estructura como la siguiente:

Estructura de paquetes del proyecto

Las clases que vamos a crear a medida para extender las características de Spring Security, las vamos a separar en un único paquete dentro de la aplicación: security.

Clases del paquete security

Antes de crear nuestro CustomJdbcDaoImpl, vamos a crear una clase donde almacenar los nuevos atributos de usuarios que vamos a recuperar.

La clase SecurityUser

Extenderemos de la clase User del núcleo de Spring Security, que implementa los métodos para almacenar la información por defecto del usuario con sus roles (authorities) asociados (importante: la contraseña no persiste en el objeto después de la autenticación, en nuestro ejemplo esta característica no nos afecta).

Nuestra propia clase de usuario SecurityUser, extiende la clase User de Spring e incorpora los atributos adicionales que vamos a usar: userId, nombre, apellidos, fechaNacimiento, sexo, fechaAlta, fechaModificacion, correElectronicoPpal, husoHorario y defaultLang.

Nuestra clase SecurityUser queda así:

package com.reor.app01.security;

import java.util.Collection;
import java.util.Date;

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.User;

public class SecurityUser extends User {

	private static final long serialVersionUID = 1L;
	
	private Long userId; 
	private String nombre;
	private String apellidos;
	private Date fechaNacimiento; 
	private String sexo; 
	private Date fechaAlta; 
	private Date fechaModificacion; 
	private String correElectronicoPpal; 
	private String husoHorario;
	private String defaultLang;
	
	public SecurityUser(
    		String login, String password,  
    		boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, 
    		boolean accountNonLocked, Collection extends GrantedAuthority> authorities, 
    		Long userId,
    		String nombre,
    		String apellidos,
    		Date fechaNacimiento,
    		String sexo,
    		Date fechaAlta,
    		Date fechaModificacion,
    		String correElectronicoPpal,
    		String husoHorario,
    		String defaultLang
			) {
    	   super(login, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities );
    	   this.userId = userId; 
    	   this.nombre = nombre;
    	   this.apellidos = apellidos; 
    	   this.fechaNacimiento = fechaNacimiento; 
    	   this.sexo = sexo;
    	   this.fechaAlta =  fechaAlta; 
    	   this.fechaModificacion = fechaModificacion; 
    	   this.correElectronicoPpal = correElectronicoPpal;
       	   this.husoHorario = husoHorario; 
    	   this.defaultLang = defaultLang;
        }	

	public SecurityUser(
    		String login, String password,  
    		boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, 
    		boolean accountNonLocked, Collection extends GrantedAuthority> authorities 
			) { super(login, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities ); }		

	public Long getUserId() {
		return userId;
	}
	public void setUserId(Long userId) {
		this.userId = userId;
	}
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public String getApellidos() {
		return apellidos;
	}
	public void setApellidos(String apellidos) {
		this.apellidos = apellidos;
	}
	public Date getFechaNacimiento() {
		return fechaNacimiento;
	}
	public void setFechaNacimiento(Date fechaNacimiento) {
		this.fechaNacimiento = fechaNacimiento;
	}
	public String getSexo() {
		return sexo;
	}
	public void setSexo(String sexo) {
		this.sexo = sexo;
	}
	public Date getFechaAlta() {
		return fechaAlta;
	}
	public void setFechaAlta(Date fechaAlta) {
		this.fechaAlta = fechaAlta;
	}
	public Date getFechaModificacion() {
		return fechaModificacion;
	}
	public void setFechaModificacion(Date fechaModificacion) {
		this.fechaModificacion = fechaModificacion;
	}
	public String getCorreElectronicoPpal() {
		return correElectronicoPpal;
	}
	public void setCorreElectronicoPpal(String correElectronicoPpal) {
		this.correElectronicoPpal = correElectronicoPpal;
	}
	public String getHusoHorario() {
		return husoHorario;
	}
	public void setHusoHorario(String husoHorario) {
		this.husoHorario = husoHorario;
	}
	public String getDefaultLang() {
		return defaultLang;
	}
	public void setDefaultLang(String defaultLang) {
		this.defaultLang = defaultLang;
	}
}

Terminos Tecnología: