org.javabeanstack.security.AbstractSecManager Maven / Gradle / Ivy
The newest version!
/*
* JavaBeanStack FrameWork
*
* Copyright (C) 2017 Jorge Enciso
* Email: [email protected]
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package org.javabeanstack.security;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import org.apache.log4j.Logger;
import org.javabeanstack.data.IDBManager;
import org.javabeanstack.error.ErrorManager;
import org.javabeanstack.util.Strings;
import org.javabeanstack.data.IGenericDAO;
/**
* Es un wraper de la clase Sessions. Se encarga de logeo de los usuario,
* creación de las sesiones, manejo de la expiración de cada sesión.
*
* El test unitario se encuentra en TestProjects clase
* py.com.oym.test.data.TestSesiones
*
* @author Jorge Enciso
*/
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public abstract class AbstractSecManager implements ISecManager, Serializable{
private static final Logger LOGGER = Logger.getLogger(AbstractSecManager.class);
protected abstract IGenericDAO getDAO();
protected abstract ISessionsLocal getSessions();
/**
* Crea una sesión de usuario para acceso a la app
*
* @param userLogin usuario
* @param password password
* @param idcompany empresa que esta solicitando ingresar
* @param idleSessionExpireInMinutes minutos sin actividad antes de cerrar la sesión.
* @return objeto conteniendo datos del login exitoso o rechazado
*/
@Override
public IUserSession createSession(String userLogin, String password, Object idcompany, Integer idleSessionExpireInMinutes) {
return getSessions().createSession(userLogin, password, idcompany, idleSessionExpireInMinutes);
}
/**
* Devuelve verdadero si sus credenciales para el logeo son válidas o falso si no
*
* @param userLogin
* @param password
* @return verdadero si sus credenciales para el logeo son válidas o falso si no
* @throws Exception
*/
@Override
public Boolean login(String userLogin, String password) throws Exception {
IUserSession sesion = getSessions().login(userLogin, password);
return sesion != null && sesion.getUser() != null;
}
/**
* Devuelve el objeto userSession posterior a la authenticación del usuario.
* @param userLogin usuario
* @param password palabra clave.
* @return userSession conteniendo información de la sesión del usuario
* @throws Exception
*/
@Override
public IUserSession login2(String userLogin, String password) throws Exception {
return getSessions().login(userLogin, password);
}
/**
* Devuelve verdadero o falso dependiendo si el identificador de la sesión
* es válida o no.
*
* @param sesionId identificador de la sesión a consultar su válidez
* @return verdadero o falso dependiendo si el identificador de la sesión.
*/
@Override
public Boolean isSesionIdValid(String sesionId){
IUserSession sesion;
sesion = getSessions().getUserSession(sesionId);
if (sesion == null){
return false;
}
if (sesion.getUser() == null){
return false;
}
return sesion.getSessionId() != null;
}
/**
* Devuelve los roles asignados a un usuario solicitado
*
* @param userLogin codigo del usuaio
* @return los roles asignados a un usuario solicitado
*/
@Override
public String getUserRol(String userLogin){
String motorDatos = getDAO().getDataEngine(IDBManager.CATALOGO);
String sqlComando="";
switch (motorDatos) {
case "SQLSERVER":
sqlComando = "select {schema}.fn_GetUserRol('{usuario}')";
break;
case "POSTGRES":
sqlComando = "select CAST({schema}.fn_GetUserRol('{usuario}') as char(200))";
break;
case "ORACLE":
sqlComando = "select CAST({schema}.fn_GetUserRol('{usuario}') as char(200)) from dual";
break;
case "DB2":
sqlComando = "select CAST({schema}.fn_GetUserRol('{usuario}') as char(200)) from SYSIBM.SYSDUMMY1";
break;
default:
Exception exp = new Exception("No es soportado este motor de datos");
ErrorManager.showError(exp, LOGGER);
}
Map params = new HashMap<>();
params.put("schema",getDAO().getSchema(IDBManager.CATALOGO));
params.put("usuario", userLogin.trim());
sqlComando = Strings.textMerge(sqlComando, params);
try {
List