Passaporte

Em determinadas ocasiões, é necessário que um usuário passe de um sistema para outro sem a necessidade de realizar um novo logon. Para isso, é necessária a criação de um passaporte de logon, implementado através da classe br.ufrn.arq.seguranca.dominio.PassaporteLogon. O passaporte de logon é cadastrado no banco comum, de forma que todos os sistemas têm acesso a ele. A tabela a seguir explica os atributos da classe.

Atributo Significado
id Chave primária. Gerado.
login Login do usuário que irá usar o passaporte.
idUsuario Id do usuário que irá usar o passaporte.
idRegistro Id do registro de entrada do usuário que irá usar o passaporte.
sistemaAlvo Sistema para onde o usuário irá.
sistemaOrigem Sistema de onde o usuário está vindo.
validade Até que período de tempo a partir do atual, o passaporte será válido ( em milisegundos )
hora Timestamp de criação do passaporte.

Cadastro de passaporte

Para cadastrar um passaporte é necessário popular os atributos da classe PassaporteLogon e chamar o ProcessadorPassaporte, através do comando ArqListaComando.CADASTRAR_PASSAPORTE. Esse processador irá criar o passaporte no banco comum. Após a criação do passaporte, é necessário redirecionar o usuário para uma URL no sistema de destino que valide o passaporte e faça automaticamente o logon do usuário.

PassaporteLogon passaporte = new PassaporteLogon();
passaporte.setHora(new Date());
passaporte.setSistemaAlvo(Sistema.COMUM);
passaporte.setSistemaOrigem(sistemaOrigem);
passaporte.setLogin(usuario.getLogin());
passaporte.setCodMovimento(ArqListaComando.CADASTRAR_PASSAPORTE);
// usuário tem 30s para utilizar o passaporte
passaporte.setValidade(System.currentTimeMillis()+30000);
 
execute(passaporte, req);
 
redirect(URL_SISTEMA_DESTINO);

Você deve criar um passaporte informando quantos ms ele deve permanecer válido.

passaporte.setValidade(System.currentTimeMillis()+"X ms");


O usuário vai ter X ms para acessar o sistema, depois disso o passaporte vai estar inválido.





A verificação da validade de um passaporte pode ser vista no código abaixo:

PassaporteDao dao = new PassaporteDao();
PassaporteLogon p = dao.findPassaporte(login, Sistema.SISTEMA_DESTINO);
if (p != null) { 
   // implementar código para logar o usuário automaticamente... 
}

Os sistemas já possuem URLs para verificação do passaporte, que estão listadas abaixo. Em todas essas URLs, é possível passar um parâmetro de request chamado url, que indica para que URL do sistema destino o usuário será direcionado após a validação do passaporte. É possível também passar um parâmetro chamado acao cujo valor é o nome de um managed bean, seguido de um ponto e o nome de um método, para que seja possível executar o método de um bean após o logon. Os parâmetros url e acao são mutuamente exclusivos.


O SigEventos é um pouco diferente, pois usa pretty faces para realizar o login com passaporte, não usa struts como os outros sistemas. A operacao={OPERACAO} diz a operação e ser executada (dentre as suportadas). E cada operação vai ter a lista de parâmetros que ela vai poder receber. Isso vai depender da operação.

Sistema URL
SIGAA /sigaa/logar.do?dispatch=logOn&user.login={LOGIN}&passaporte=true&[url={URL}|acao={ACAO}]
SIPAC /sipac/logon.do?dispatch=logOn&login={LOGIN}&passaporte=true&[url={URL}|acao={ACAO}]
SIGPRH /sigrh/Logon?login={LOGIN}&passaporte=true&idUsuario={ID_USUARIO}&[url={URL}|acao={ACAO}]
SIGADMIN /admin/logar.jsf?passaporte=true&login={LOGIN}&url=[url={URL}|acao={ACAO}]
SIGEventos /eventos/public/logarPassaporte/{LOGIN}/?operacao={OPERACAO}&parametro1={Parametro1}&parametro2={Parametro2}…&parametroN={ParametroN}