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. |
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}¶metro1={Parametro1}¶metro2={Parametro2}…¶metroN={ParametroN} |