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