CustomInMemoryIdentityStore.java
CustomInMemoryIdentityStore.java
En este ejemplo tenemos una clase Usuario que contiene múltiples Roles
El usuario al logearse selecciona el rol con el que desee realizar la sesión.
También se valida por el Almacen estos objetos son pasados desde el LoginController.java
Esquema

Definir los métodos
CredentialValidationResult validate(Credential credential)
Boolean isValidUser(String username, String password)
Boolean isValidData(String username, String password)
public CredentialValidationResult validate(Credential credential) {
UsernamePasswordCredential login = (UsernamePasswordCredential) credential;
import com.avbravo.jmoordb.configuration.JmoordbContext;
import com.avbravo.jmoordbutils.JsfUtil;
import com.avbravo.store.util.ResourcesFiles;
import com.avbravo.storeejb.entity.Almacen;
import com.avbravo.storeejb.entity.Rol;
import com.avbravo.storeejb.entity.Usuario;
import com.avbravo.storeejb.repository.UsuarioRepository;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Optional;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.security.enterprise.credential.Credential;
import javax.security.enterprise.credential.UsernamePasswordCredential;
import javax.security.enterprise.identitystore.CredentialValidationResult;
import javax.security.enterprise.identitystore.IdentityStore;
/**
*
* @author avbravo
*/
@ApplicationScoped
public class CustomInMemoryIdentityStore implements IdentityStore {
private String rolValue = "";
@Inject
ResourcesFiles rf;
@Inject
UsuarioRepository usuarioRepository;
@Override
public CredentialValidationResult validate(Credential credential) {
UsernamePasswordCredential login = (UsernamePasswordCredential) credential;
//Esta adaptado para guardar el GRUPO DEL USUARIO la validacion se hizo en LoginController
String username = login.getCaller();
String password = login.getPasswordAsString();
if (!isValidUser(username, password)) {
return CredentialValidationResult.NOT_VALIDATED_RESULT;
}
return new CredentialValidationResult(rolValue, new HashSet<>(Arrays.asList(rolValue)));
}
// <editor-fold defaultstate="collapsed" desc="metodo()">
private Boolean isValidUser(String username, String password) {
try {
if (!isValidData(username, password)) {
return false;
}
Usuario usuario = new Usuario();
usuario.setUsername(username);
Almacen almacen = (Almacen) JmoordbContext.get("_login_almacen");
Rol rol = (Rol) JmoordbContext.get("_login_rol");
//Asigna el rol del usuario
this.rolValue = rol.getIdrol();
//-----------------
usuario.setUsername(username);
Optional<Usuario> optional = usuarioRepository.findById(usuario);
if (!optional.isPresent()) {
JsfUtil.warningMessage(rf.getAppMessage("login.usernamenotvalid"));
return false;
} else {
Usuario u2 = optional.get();
usuario = u2;
//guarda el usuario logeado
JmoordbContext.put("_userLogged", usuario);
if (!JsfUtil.desencriptar(usuario.getPassword()).equals(password)) {
JsfUtil.successMessage(rf.getAppMessage("login.passwordnotvalid"));
return false;
}
if (usuario.getActivo().equals("no")) {
JsfUtil.successMessage(rf.getAppMessage("login.usuarioinactivo"));
return false;
}
//Valida los roles del usuario si coincide con el seleccionado
Boolean foundalmacen = false;
for (Almacen a : usuario.getAlmacen()) {
if (almacen.getIdalmacen().equals(a.getIdalmacen())) {
foundalmacen = true;
}
}
if (!foundalmacen) {
JsfUtil.successMessage(rf.getMessage("warning.noestaasignadoaesealmacen") + " " + rol.getIdrol());
return false;
}
//Valida los roles del usuario si coincide con el seleccionado
Boolean foundrol = false;
for (Rol r : usuario.getRol()) {
if (rol.getIdrol().equals(r.getIdrol())) {
foundrol = true;
}
}
if (!foundrol) {
JsfUtil.successMessage(rf.getAppMessage("login.notienerolenelsistema") + " " + rol.getIdrol());
return false;
}
return true;
}
} catch (Exception e) {
}
return false;
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="Boolean isValidData(String username, String password)">
private Boolean isValidData(String username, String password) {
try {
if (username.isEmpty() || username.equals("") || username == null) {
JsfUtil.successMessage(rf.getAppMessage("warning.usernameisempty"));
return false;
}
if (password.isEmpty() || password.equals("") || password == null) {
JsfUtil.successMessage(rf.getAppMessage("warning.passwordisempty"));
return false;
}
return true;
} catch (Exception e) {
}
return false;
}
// </editor-fold>
}
Last updated
Was this helpful?