====== 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} |