package gcom.gui.util; import gcom.fachada.Fachada; import gcom.seguranca.acesso.Abrangencia; import gcom.seguranca.acesso.FiltroFuncionalidade; import gcom.seguranca.acesso.FiltroFuncionalidadeCategoria; import gcom.seguranca.acesso.FiltroOperacao; import gcom.seguranca.acesso.Funcionalidade; import gcom.seguranca.acesso.FuncionalidadeCategoria; import gcom.seguranca.acesso.Grupo; import gcom.seguranca.acesso.Operacao; import gcom.seguranca.acesso.usuario.Usuario; import gcom.util.Util; import gcom.util.filtro.ComparacaoTexto; import gcom.util.filtro.ParametroSimples; import java.io.IOException; import java.util.Collection; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.log4j.Logger; /** * Filtro respons�vel pela seguran�a do sistema verificando se o usu�rio que est� * requisitando a funcionalidade ou opera��o, tem acesso ou algum tipo de restri��o * * @author Pedro Alexandre * @date 20/07/2006 */ public class FiltroSegurancaAcesso extends HttpServlet implements Filter { //Vari�vel que aramzena as configura��es iniciais do filtro private FilterConfig filterConfig; private static final long serialVersionUID = 1L; /** * Met�do respons�vel por setaas configura��es inicias necess�rias * * @author Pedro Alexandre * @date 20/07/2006 * * @param filterConfig */ public void init(FilterConfig filterConfig) { this.filterConfig = filterConfig; } /** * Met�do respons�vel por verificar se o usu�rio tem acesso a funcionalidade ou opera��o * * @author Pedro Alexandre * @date 20/07/2006 * * @param request * @param response * @param filterChain * @throws ServletException * @throws IOException */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws ServletException, IOException { try { //Faz um cast no request para recuperar a sess�o do usu�rio HttpServletRequest requestPagina = ((HttpServletRequest) request); //Recupera a sess�o do usu�rio logado HttpSession sessao = requestPagina.getSession(false); //Recupera o usu�rio que est� logado da sess�o Usuario usuarioLogado = null; if(sessao != null){ usuarioLogado= (Usuario) sessao.getAttribute("usuarioLogado"); } Abrangencia abrangencia = (Abrangencia)request.getAttribute(Abrangencia.ABRANGENCIA); //Recupera a cole��o de grupos que o usu�rio logado pertence Collection<Grupo> colecaoGruposUsuario = null; if(sessao != null){ colecaoGruposUsuario = (Collection) sessao.getAttribute("colecaoGruposUsuario"); } //Recupera a url do request String enderecoURL = requestPagina.getServletPath(); /* * Caso a url seja de um processo de abas * recupera a url pelo parametro do wizard adicionando o ".do" no final */ if(enderecoURL.contains("Wizard")){ enderecoURL = requestPagina.getParameter("action") + ".do"; } //Alterado por S�vio Luiz. //Data:29/02/2008 //verifica se o endere�o da funcionalidade existe a palavra tabela auxiliar //se existir ent�o acrescenta o parametros ao caminho para //que ele seja �nico. if(enderecoURL.contains("TabelaAuxiliar")){ if(requestPagina.getParameter("tela") != null && !requestPagina.getParameter("tela").equals("")){ enderecoURL = enderecoURL+ "?tela="+requestPagina.getParameter("tela") ; } } //Caso seja um acesso ao olap, a url � a mesma para todos //por isso pega o id da funcionalidade direto Integer idFuncionalidade = null; if(enderecoURL.contains("selecaoOLAPAction")){ String id = requestPagina.getParameter("id"); if(id != null && !id.equals("")){ idFuncionalidade = new Integer(requestPagina.getParameter("id")); } } if(enderecoURL.contains("informarDadosGeracaoRelatorioConsultaAction")){ String id = requestPagina.getParameter("id"); if(id != null && !id.equals("")){ idFuncionalidade = new Integer(requestPagina.getParameter("id")); } } Fachada fachada = Fachada.getInstancia(); //Verifica se a url requisitada pelo usu�rio � uma opera��o ou uma funcionalidade String tipoURL = fachada.verificarTipoURL(enderecoURL); setCaminhoMenu(sessao, idFuncionalidade, enderecoURL, tipoURL); //Caso o usu�rio esteja logado e n�o tenha clicado no link de logoff if(usuarioLogado != null && !enderecoURL.contains("Logoff") && !enderecoURL.contains("Login") && !enderecoURL.contains("telaPrincipal") && // !enderecoURL.contains("cancelar") && !enderecoURL.contains("executarBatch") && !enderecoURL.toLowerCase().contains("pesquisar") && !enderecoURL.toLowerCase().contains("relatorio") && !enderecoURL.contains("efetuarAlteracaoSenhaAction") && !enderecoURL.contains("carregarParametrosAction") && !enderecoURL.contains("exibirInformarMelhoriasGcomAction") && !enderecoURL.contains("informarMelhoriasGcomAction") && !enderecoURL.contains("exibirEfetuarAlteracaoSenhaSimplificadaAction") && !enderecoURL.contains("efetuarAlteracaoSenhaSimplificadaAction") && !enderecoURL.contains("exibirConsultarSistemaAlteracaoHistoricoAction") && !enderecoURL.contains("exibirSistemaHistAlteracaoDetalharPopupAction") && !enderecoURL.contains("exibirConsultarDadosPagamentoAction") && !enderecoURL.contains("exibirConsultarSituacaoEspecialFaturamentoPopupAction") && !enderecoURL.contains("exibirConsultarSituacaoEspecialCobrancaPopupAction") && !enderecoURL.contains("processarRequisicaoDipositivoMovelAction") && !enderecoURL.contains("processarRequisicaoTelemetriaAction") && !enderecoURL.contains("processarRequisicaoGisAction") && !enderecoURL.contains("processarCoordenadasGisAction") && !enderecoURL.contains("processarRequisicaoDipositivoMovelImpressaoSimultaneaAction") && !enderecoURL.contains("processarRequisicaoDispositivoMovelAcompanhamentoServicoAction") ){ //Caso o tipo da url n�o esteja nulo if(tipoURL != null){ //Caso o usu�rio tenha solicitado uma funcionalidade if(tipoURL.equalsIgnoreCase("funcionalidade")){ /* * Caso usu�rio n�o tenha acesso a funcionalidade * exibe a tela de acesso negado para funcionalidade * Caso contr�rio chama o pr�ximo filtro na fila */ if(!fachada.verificarAcessoPermitidoFuncionalidade(usuarioLogado, enderecoURL, colecaoGruposUsuario,idFuncionalidade)){ RequestDispatcher rd = filterConfig.getServletContext(). getRequestDispatcher("/jsp/util/acesso_negado_funcionalidade.jsp"); request.setAttribute("URL", enderecoURL); rd.forward(request,response); }else{ doFilter(request, response, filterChain, usuarioLogado, enderecoURL); } //Caso o usu�rio tenha solicitado uma opera��o }else if(tipoURL.equalsIgnoreCase("operacao")){ /* * Caso o usu�rio n�o tenha acesso a opera��o * exibe a tela de acesso negado para opera��o * Caso contr�rio chama o pr�ximo filtro na fila */ if(!fachada.verificarAcessoPermitidoOperacao(usuarioLogado, enderecoURL, colecaoGruposUsuario)){ RequestDispatcher rd = filterConfig.getServletContext(). getRequestDispatcher("/jsp/util/acesso_negado_operacao.jsp"); request.setAttribute("URL", enderecoURL); rd.forward(request,response); }else{ if(abrangencia != null){ if(!fachada.verificarAcessoAbrangencia(abrangencia)){ RequestDispatcher rd = filterConfig.getServletContext(). getRequestDispatcher("/jsp/util/acesso_negado_abrangencia.jsp"); rd.forward(request,response); }else{ doFilter(request, response, filterChain, usuarioLogado, enderecoURL); } }else{ doFilter(request, response, filterChain, usuarioLogado, enderecoURL); } } } }else{ RequestDispatcher rd = filterConfig.getServletContext(). getRequestDispatcher("/jsp/util/acesso_negado_funcionalidade.jsp"); request.setAttribute("URL", enderecoURL); rd.forward(request,response); } // Lista de todas as funcionalidades que podem ser acessadas sem que exista um usuario logado na sessao } else if (enderecoURL.contains("Logoff") || enderecoURL.contains("Login") || enderecoURL.contains("telaPrincipal") || // enderecoURL.contains("cancelar") || enderecoURL.contains("executarBatch") || enderecoURL.toLowerCase().contains("pesquisar") || enderecoURL.toLowerCase().contains("relatorio") || enderecoURL.contains("efetuarAlteracaoSenhaAction") || enderecoURL.contains("carregarParametrosAction") || enderecoURL.contains("exibirInformarMelhoriasGcomAction") || enderecoURL.contains("informarMelhoriasGcomAction") || enderecoURL.contains("exibirEfetuarAlteracaoSenhaSimplificadaAction") || enderecoURL.contains("efetuarAlteracaoSenhaSimplificadaAction") || enderecoURL.contains("exibirConsultarSistemaAlteracaoHistoricoAction") || enderecoURL.contains("exibirSistemaHistAlteracaoDetalharPopupAction") || enderecoURL.contains("exibirLembrarSenhaAction") || enderecoURL.contains("lembrarSenhaAction") || enderecoURL.contains("exibirEmitirSegundaViaContaInternetAcessoGeralAction") || enderecoURL.contains("emitirSegundaViaContaInternetAcessoGeralAction") || enderecoURL.contains("enviarDadosBancosAcessoGeralAction") || enderecoURL.contains("exibirSelecionarBancoAcessoGeralAction") || enderecoURL.contains("exibirSelecionarBancoAction") || enderecoURL.contains("enviarDadosBancosAction") || enderecoURL.contains("exibirLogTelaInicialAction") || enderecoURL.contains("exibirLogTelaFinalAction") || enderecoURL.contains("exibirConsultarDadosPagamentoAction") || enderecoURL.contains("processarRequisicaoDipositivoMovelAction") || enderecoURL.contains("exibirConsultarSituacaoEspecialFaturamentoPopupAction") || enderecoURL.contains("exibirConsultarSituacaoEspecialCobrancaPopupAction") || enderecoURL.contains("processarRequisicaoTelemetriaAction")|| enderecoURL.contains("processarRequisicaoGisAction") || enderecoURL.contains("processarCoordenadasGisAction") || enderecoURL.contains("processarRequisicaoDipositivoMovelImpressaoSimultaneaAction" ) || enderecoURL.contains("processarRequisicaoDispositivoMovelAcompanhamentoServicoAction") || enderecoURL.contains("exibirEmitir2viaDeclaracaoAnualQuitacaoDebitosAction") || enderecoURL.contains("emitir2viaDeclaracaoAnualQuitacaoDebitosAction") || enderecoURL.contains("exibirInserirCadastroEmailClienteAction") || enderecoURL.contains("inserirCadastroEmailClienteAction") || enderecoURL.contains("gerarRelatorio2ViaContaAction") || enderecoURL.contains("exibirInserirCadastroContaBraileAction") || enderecoURL.contains("inserirCadastroContaBraileAction") || enderecoURL.contains("exibirServicosPortalCompesaAction") || enderecoURL.contains("inserirCadastroEmailClientePortalAction") || enderecoURL.contains("exibirInserirSolicitacaoServicosPortalAction") || enderecoURL.contains("inserirSolicitacaoServicosPortalAction") || enderecoURL.contains("exibirInserirCadastroEmailClientePortalAction") || enderecoURL.contains("inserirCadastroContaBrailePortalAction") || enderecoURL.contains("exibirInserirCadastroContaBrailePortalAction") || enderecoURL.contains("emitirSegundaViaContaAction") || enderecoURL.contains("exibirCanaisAtendimentoCompesaAction")|| enderecoURL.contains("exibirQuestionarioSatisfacaoAction") || enderecoURL.contains("questionarioSatisfacaoAction") || enderecoURL.contains("exibirInformacoesPortalCompesaAction") || enderecoURL.contains("exibirInformacoesTarifaSocialPortalCompesaAction") || enderecoURL.contains("exibirInformacoesNegociacaoDebitosPortalCompesaAction") || enderecoURL.contains("exibirNormasInstalacaoPortalCompesaAction") || enderecoURL.contains("exibirCalendarioAbastecimentoPortalCompesaAction") || enderecoURL.contains("exibirPortalInformacoesCompesaAction") || enderecoURL.contains("exibirEfetuarParcelamentoDebitosPortalAction") || enderecoURL.contains("exibirLojasAtendimentoPresencialPortalCompesaAction") || enderecoURL.contains("efetuarParcelamentoDebitosPortalAction") || enderecoURL.contains("exibirConsultarEstruturaTarifariaPortalAction") ){ doFilter(request, response, filterChain, usuarioLogado, enderecoURL); } else { RequestDispatcher rd = filterConfig.getServletContext() .getRequestDispatcher( "/jsp/util/acesso_negado_funcionalidade.jsp"); request.setAttribute("URL", enderecoURL); rd.forward(request, response); } } catch (ServletException sx) { throw sx; } catch (IOException iox) { throw iox; } } private void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain, Usuario usuarioLogado, String enderecoURL) throws IOException, ServletException { long tempoInicial =System.currentTimeMillis(); filterChain.doFilter(request, response); long tempoFinal = System.currentTimeMillis() - tempoInicial; Logger log = Logger.getLogger("GSAN_TEMPO"); if (usuarioLogado != null) { log.debug(usuarioLogado.getNomeUsuario()+":"+ enderecoURL+": " + tempoFinal + "ms"); } else { log.debug(enderecoURL+": " + tempoFinal + "ms"); } } private void setCaminhoMenu(HttpSession sessao, Integer idFuncionalidade, String enderecoURL, String tipoURL) { String caminhoMenuFuncionalidade = ""; Fachada fachada = Fachada.getInstancia(); //Ajuste que monta o caminho correto da funcionalidade Manter Vinculos de Imoveis para Rateio de Consumo. //Pois o mesmo re-utiliza classes da funcionalidade Manter Imovel, ocorrendo conflito no momento que carrega o caminho do menu. if ( sessao != null && sessao.getAttribute("caminhoMenuFuncionalidade") != null && sessao.getAttribute("caminhoMenuFuncionalidade").equals("Gsan -> Micromedicao -> Medicao Individualizada -> Manter Vinculos de Imoveis para Rateio de Consumo") ) { caminhoMenuFuncionalidade = "Gsan -> Micromedicao -> Medicao Individualizada -> Manter Vinculos de Imoveis para Rateio de Consumo"; } else if (tipoURL != null) { Funcionalidade funcionalidade = recuperarFuncionalidadePelaURL(enderecoURL, tipoURL, fachada); if (idFuncionalidade != null) { FiltroFuncionalidade filtroFuncionalidade = new FiltroFuncionalidade(); filtroFuncionalidade.adicionarCaminhoParaCarregamentoEntidade("funcionalidadeCategoria"); filtroFuncionalidade.adicionarParametro(new ParametroSimples(FiltroFuncionalidade.ID, idFuncionalidade)); Collection colecaoFuncionalidade = fachada.pesquisar(filtroFuncionalidade, Funcionalidade.class.getName()); funcionalidade = (Funcionalidade) Util.retonarObjetoDeColecao(colecaoFuncionalidade); } else { funcionalidade = recuperarFuncionalidadePelaURL(enderecoURL, tipoURL, fachada); } if (funcionalidade != null && funcionalidade.getFuncionalidadeCategoria() != null) { FuncionalidadeCategoria funcionalidadeCategoria = funcionalidade.getFuncionalidadeCategoria(); caminhoMenuFuncionalidade = funcionalidadeCategoria .getNome() + " -> " + funcionalidade.getDescricao(); while (funcionalidadeCategoria .getFuncionalidadeCategoriaSuperior() != null) { FiltroFuncionalidadeCategoria filtroFuncionalidadeCategoria = new FiltroFuncionalidadeCategoria(); filtroFuncionalidadeCategoria .adicionarParametro(new ParametroSimples( FiltroFuncionalidadeCategoria.ID, funcionalidadeCategoria .getFuncionalidadeCategoriaSuperior() .getId())); Collection colecaoFuncionalidadeCategoria = fachada .pesquisar(filtroFuncionalidadeCategoria, FuncionalidadeCategoria.class.getName()); funcionalidadeCategoria = (FuncionalidadeCategoria) Util .retonarObjetoDeColecao(colecaoFuncionalidadeCategoria); caminhoMenuFuncionalidade = funcionalidadeCategoria .getNome() + " -> " + caminhoMenuFuncionalidade; } } } if (sessao != null) { sessao.setAttribute("caminhoMenuFuncionalidade", caminhoMenuFuncionalidade); } } private Funcionalidade recuperarFuncionalidadePelaURL(String enderecoURL, String tipoURL, Fachada fachada) { Funcionalidade retorno = null; if (tipoURL.equalsIgnoreCase("funcionalidade")) { // Cria o filtro para pesquisar a funcionalidade com a url informada FiltroFuncionalidade filtroFuncionalidade = new FiltroFuncionalidade(); filtroFuncionalidade.adicionarCaminhoParaCarregamentoEntidade("funcionalidadeCategoria"); if (enderecoURL.startsWith("/")) { filtroFuncionalidade.adicionarParametro(new ComparacaoTexto( FiltroFuncionalidade.CAMINHO_URL, enderecoURL .substring(1))); } else { filtroFuncionalidade.adicionarParametro(new ComparacaoTexto( FiltroFuncionalidade.CAMINHO_URL, enderecoURL)); } // Pesquisa a funcionalidade com a url informada Collection colecaoFuncionalidade = fachada.pesquisar( filtroFuncionalidade, Funcionalidade.class.getName()); if (colecaoFuncionalidade != null && !colecaoFuncionalidade.isEmpty()) { retorno = (Funcionalidade) Util.retonarObjetoDeColecao(colecaoFuncionalidade); } } else { // Cria o filtro para pesquisar a opera��o da url informada // e carrega a funcionalidade da opera��o FiltroOperacao filtroOperacao = new FiltroOperacao(); // filtroOperacao.adicionarParametro(new // ParametroSimples(FiltroOperacao.CAMINHO_URL,urlOperacao)); if (enderecoURL.startsWith("/")) { filtroOperacao.adicionarParametro(new ComparacaoTexto( FiltroOperacao.CAMINHO_URL, enderecoURL .substring(1))); } else { filtroOperacao.adicionarParametro(new ComparacaoTexto( FiltroOperacao.CAMINHO_URL, enderecoURL)); } filtroOperacao .adicionarCaminhoParaCarregamentoEntidade("funcionalidade.funcionalidadeCategoria"); // Pesquisa a opera��o no sistema com a url informada Collection colecaoOperacao = fachada.pesquisar(filtroOperacao, Operacao.class.getName()); if (colecaoOperacao != null && !colecaoOperacao.isEmpty()) { Operacao operacao = (Operacao) Util .retonarObjetoDeColecao(colecaoOperacao); retorno = operacao.getFuncionalidade(); } } return retorno; } /** * <Breve descri��o sobre o caso de uso> * * @author Pedro Alexandre * @date 05/07/2006 * */ public void destroy() { } }