All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ec.gob.senescyt.sniese.commons.security.shiro.FiltroPermisos Maven / Gradle / Ivy

There is a newer version: 2.0.5
Show newest version
package ec.gob.senescyt.sniese.commons.security.shiro;

import ec.gob.senescyt.sniese.commons.security.InformacionAcceso;
import ec.gob.senescyt.sniese.commons.security.InformacionAccesoParser;
import ec.gob.senescyt.sniese.commons.security.PrincipalProvider;
import ec.gob.senescyt.sniese.commons.security.PrincipalProviderImpl;
import org.apache.shiro.web.filter.authz.AuthorizationFilter;
import org.apache.shiro.web.util.WebUtils;
import org.eclipse.jetty.servlets.CrossOriginFilter;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class FiltroPermisos extends AuthorizationFilter {
    private static final String PERMISOS_INSUFICIENTES = "Permisos insuficientes";
    private static final String METODO_OPTIONS = "OPTIONS";
    private static final String COMODIN = "*";
    private final InformacionAccesoParser informacionAccesoParser;
    private final PrincipalProvider principalProvider;

    public FiltroPermisos() {
        informacionAccesoParser = new InformacionAccesoParser();
        principalProvider = new PrincipalProviderImpl();
    }

    @Override
    protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
        InformacionAcceso informacionAcceso = informacionAccesoParser.analizar(mappedValue);
        String metodo = WebUtils.toHttp(request).getMethod();
        if (metodo.equals(METODO_OPTIONS)) {
            return true;
        }
        String permisoRequerido = informacionAcceso.obtenerPermisosParaMetodo(metodo);
        return COMODIN.equals(permisoRequerido) || principalProvider.obtenerUsuarioAutenticado().hasRole(permisoRequerido);
    }

    @Override
    @SuppressWarnings("PMD.SignatureDeclareThrowsException")
    protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws IOException {
        HttpServletResponse respuesta = WebUtils.toHttp(response);
        respuesta.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
        respuesta.setHeader(CrossOriginFilter.ACCESS_CONTROL_ALLOW_ORIGIN_HEADER, COMODIN);
        respuesta.setHeader(CrossOriginFilter.ACCESS_CONTROL_ALLOW_CREDENTIALS_HEADER, "true");
        respuesta.getWriter().print(PERMISOS_INSUFICIENTES);
        return false;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy