protected boolean processRoles( HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws IOException, ServletException { String role = null; ArrayList regras = new ArrayList(); /* * Trecho responsável por pegar as regras de acesso definidas no Struts * Este tratamento foi feito para permitir/restringir acesso a mais de * uma opção por url. No caso Reclassificar Assunto e Mensagem através * da url reclassificar */ if (mapping.getRoles() != null) { String[] roles = mapping.getRoles().split(","); for (int cont = 0; cont < roles.length; cont++) { try { new Long(roles[cont]); } catch (Exception e) { e.printStackTrace(); throw new ServletException("Código de regra de acesso inválido."); } regras.add(roles[cont]); role = (String) regras.get(0); // Pega a primeira regra(role) } } OrgaoCtrl orgaoCtrl = new OrgaoCtrl(daoFactory); /* Não existe bloqueio para esta acão */ if (role == null || role.trim().length() == 0) { return true; } request.setAttribute(Constants.SR_FUNCIONALIDADE, role); /*Coloca a funcionalidade na sessão para * ser recuperada na tela de ajuda */ request.getSession().setAttribute(Constants.SR_FUNCIONALIDADE, role); ControleAcessoCtrl controleAcessoCtrl = new ControleAcessoCtrl(daoFactory); Orgao orgao = orgaoCtrl.get((String) request.getSession().getAttribute(Constants.ID_SESSAO_ORGAO)); /* verifico a vigência do órgão para acionamento e consulta resposta */ String redirect = null; int vigenciaOrgao = controleAcessoCtrl.verificaVigenciaOrgao(orgao, role); switch (vigenciaOrgao) { case ControleAcessoCtrl.VG_FORA_PERIODO_ACIONAMENTO: redirect = Constants.CAD_ACNMNT_FORA_VIGENCIA_PAGE; break; case ControleAcessoCtrl.VG_FORA_PERIODO_CONSULTA_RESPOSTA: redirect = Constants.CON_RESPTA_FORA_VIGENCIA_PAGE; break; case ControleAcessoCtrl.VG_FORA_PERIODO_OPERACAO: redirect = Constants.CAD_OPERACAO_FORA_VIGENCIA_PAGE; break; default: // DO NOTHING } if (redirect != null) { controleAcessoCtrl = null; /* retiro o controle do struts */ doForward(redirect, request, response); return false; } /* verifico o acesso do funcionario ao sistema */ int possuiAcesso = ControleAcessoCtrl.CA_NECESSARIO_LOGIN; try { Long funcionarioId = (Long) request.getSession().getAttribute(Constants.PA_FUNCIONARIO); FuncionarioCtrl funcionarioCtrl = new FuncionarioCtrl(daoFactory); Funcionario funcionario = (Funcionario) funcionarioCtrl.get(funcionarioId); possuiAcesso = controleAcessoCtrl.permiteAcesso(orgao, funcionario, regras); } catch (DaoException e) { System.out.println(e.getMessage()); e.printStackTrace(); throw new ServletException(e); } redirect = Constants.LOGIN_ACTION; switch (possuiAcesso) { case ControleAcessoCtrl.CA_ACESSO_PERMITIDO: request.getSession().setAttribute(Constants.SR_FUNCIONALIDADES, regras); return true; case ControleAcessoCtrl.CA_ACESSO_NEGADO: redirect = Constants.DENIED_ACCESS_ACTION; break; case ControleAcessoCtrl.CA_NECESSARIO_LOGIN: redirect = Constants.LOGIN_ACTION; break; case ControleAcessoCtrl.VG_FORA_PERIODO_OPERACAO: redirect = Constants.CAD_OPERACAO_FORA_VIGENCIA_PAGE; break; default: redirect = Constants.LOGIN_ACTION; } controleAcessoCtrl = null; /* retiro o funcionario da sessão */ request.getSession().removeAttribute(Constants.PA_FUNCIONARIO); /* retiro o controle do struts */ doForward(redirect, request, response); return false; }