ec.gob.senescyt.sniese.commons.security.shiro.SeguridadRealm Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sniese-commons Show documentation
Show all versions of sniese-commons Show documentation
Librería que contiene clases de uso comun para sniese hechos en dropwizard
package ec.gob.senescyt.sniese.commons.security.shiro;
import com.sun.jersey.api.client.ClientHandlerException;
import com.sun.jersey.api.client.UniformInterfaceException;
import ec.gob.senescyt.sniese.commons.clients.ServicioFactory;
import ec.gob.senescyt.sniese.commons.clients.ServicioUsuarioCliente;
import ec.gob.senescyt.sniese.commons.security.Permiso;
import ec.gob.senescyt.sniese.commons.security.PrincipalProviderImpl;
import ec.gob.senescyt.sniese.commons.security.Usuario;
import ec.gob.senescyt.sniese.commons.security.UsuarioAutenticado;
import ec.gob.senescyt.sniese.commons.security.exceptions.LoginIncorrectoException;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import java.util.HashSet;
import java.util.Optional;
public class SeguridadRealm extends AuthorizingRealm {
protected static final String NOMBRE_REALM = "SenescytRealm";
private ServicioUsuarioCliente servicioUsuarioCliente;
private String tokenAutenticacionServicio;
@Override
public String getName() {
return NOMBRE_REALM;
}
@Override
public boolean supports(AuthenticationToken token) {
return token instanceof BearerToken;
}
@Override
@SuppressWarnings("PMD.PreserveStackTrace")
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken tokenAutenticacion) throws AuthenticationException {
String credenciales = String.valueOf(tokenAutenticacion.getCredentials());
return obtenerInformacionAutenticacionConCredenciales(credenciales);
}
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
Optional usuarioAutenticadoOpcional = principals.fromRealm(NOMBRE_REALM).stream().findFirst();
HashSet permisos = new HashSet<>();
if (usuarioAutenticadoOpcional.isPresent()) {
usuarioAutenticadoOpcional.get().getPermisos().stream().map(Permiso::getNombrePermiso).forEach(nombrePermiso -> permisos.add(nombrePermiso));
}
return new SimpleAuthorizationInfo(permisos);
}
public void setServicioUsuarioCliente(String dominioAutenticacion) {
servicioUsuarioCliente = new ServicioUsuarioCliente(
new ServicioFactory(dominioAutenticacion, tokenAutenticacionServicio),
new PrincipalProviderImpl());
}
public void setTokenAutenticacionServicio(String tokenAutenticacionServicio) {
this.tokenAutenticacionServicio = tokenAutenticacionServicio;
}
private AuthenticationInfo obtenerInformacionAutenticacionConCredenciales(String credenciales) {
return credenciales.equals(tokenAutenticacionServicio) ?
obtenerAutenticacionDeUsuarioSistema(credenciales) :
obtenerAutenticacionDelTokenUsuario(credenciales);
}
private AuthenticationInfo obtenerAutenticacionDelTokenUsuario(String credenciales) {
try {
Usuario usuarioAutenticado = servicioUsuarioCliente.obtenerInformacionUsuarioPorToken(credenciales);
usuarioAutenticado.setCredenciales(credenciales);
return new SimpleAuthenticationInfo(usuarioAutenticado, credenciales, NOMBRE_REALM);
} catch (ClientHandlerException | UniformInterfaceException e) {
throw new LoginIncorrectoException(e.getLocalizedMessage());
}
}
private AuthenticationInfo obtenerAutenticacionDeUsuarioSistema(String credenciales) {
return new SimpleAuthenticationInfo(UsuarioAutenticado.crearUsuarioSistemaConCredenciales(credenciales), credenciales, NOMBRE_REALM);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy