Fórum WebService e WebModule #444955

07/06/2013

0

Fala pessoal!

Alguém já trabalhou com os Exemplos do Andreano Lanusse sobre webservice/rest/json no delphi XE2?

File>New>Other>DataSnap REST Application.
ele cria um webservice para ser acessado via Android ou qualquer outro cliente que se conecte com o webservice.
e é criado automaticamente com exemplos e tudo mais ReverseString e o ServerFunctionInvoker que é para chamar os métodos como exemplos.
e tem Autenticação e tudo.

Agora minha dúvida..
eu estou criando um webservice para um aplicativo android.. onde serão apresentados os cadastros..
a minha idéia é que esses cadastros NÃO sejam feitos no celular.. e sim em paginas web, feitas nesse servidor mesmo acessando via web.

no Android ele gera várias classes de Conexão.. blz.

Agora para as páginas web a autenticação se dá via javascript, nos exemplos: em todas as páginas eu tenho que fazer um formulário de login e esconder a Div se o login foi feito com sucesso.

Minha pergunta! Como eu posso fazer o controle de autenticação das páginas web sem que eu tenha que colocar o login em todas as páginas e sim fazer redirecionamentos para uma página de login e carregar as variáveis ou as informações da sessão para outra página?

Me ajudem ae pessoal, já vi muitos exemplos na internet, mas todos são muito básicos e não tem nenhum curso avançado sobre isso.

Qualquer link, resposta ou mesmo uma pergunta pode ajudar.
vlw
Paulo Pinto

Paulo Pinto

Responder

Posts

10/06/2013

Rodolpho Silva

Olá colega Paulo!

Bem, o que você pode fazer é armazenar as credenciais de autenticação (usuário, senha, etc..) em arquivos locais, conhecidos como cookies ([url]http://pt.wikipedia.org/wiki/Cookie[/url]). Aí, cada vez que você precisar obter uma informação do banco de dados, você pode ler os cookies armazenados localmente, extrair as credenciais de acesso ao banco e realizar sua consulta normalmente. Na empresa onde trabalho, desenvolvemos um serviço em Delphi (TService) onde ele age como um servidor de aplicação, onde quando o usuário faz o login do sistema, é criado um objeto onde este conecta ao BD e fica ativo no serviço enquanto a sessão do usuário durar. As demais consultas, o sistema não realiza uma nova conexão e sim reaproveita a que já foi criada, maximizando assim o tempo de resposta. A sessão do usuário termina com logout ou timeout e logo em seguida, o objeto é liberado.
Responder

Gostei + 0

10/06/2013

Paulo Pinto

Oi Rodolpho,
Obrigado pela resposta!

Eu estava pensando em fazer assim mesmo.. teria que ler o cookie antes de abrir a página e verificar se fez login..
vi aqui mesmo no site.. como utilizar o jquery.Cookie.

Agora aproveitando o tópico.. está certo a maneira que estou utilizando o WebModule?
A aplicação Android acessa o Rest e a IntraWeb onde vão ser feitos os cadastros tbm acessa o rest?

não seria mais simples a IntraWeb Apenas acessar as páginas do servidorweb? teria alguma forma de fazer isso?

Responder

Gostei + 0

10/06/2013

Rodolpho Silva

Olá camarada,

Detalha melhor como está a comunicação tanto do Android como do IW....
Responder

Gostei + 0

11/06/2013

Paulo Pinto

Desculpa a demora, ficamos sem energia ontem atarde.

Para o Android o Delphi gera várias classes em Java, basta declarar uma variavel do Tipo DSRESTConnection gerada pelo próprio dephi
private static DSRESTConnection getConnection() {
		
		if(restConnection ==null)
		{
			restConnection = new DSRESTConnection();
			// todo trocar pelo ip do servidor
			restConnection.setHost("192.168.15.22");
			restConnection.setPort(8086);
			restConnection.setPassword("");
			restConnection.setUserName("");
			restConnection.setProtocol("http");
		}
		return restConnection;
	}

      retorno = restConnection.nomedometodo(parametros)


e para o JavaScript tbm a mesma coisa o delphi gera várias classes para conexão

setConnection('<#host>', '<#port>', '<#urlpath>');

function serverMethods()
{
  return new <#classname>(connectionInfo);
}

if (!setCredentials(login.val(), senha.val()))
{
//Insere na DIV #resultado o que foi retornado pelas classes de manipulação do Usuário (Se os dados estão corretos ou não)				
$("#resultado").html("Login ou senha incorretos...");			
return false;
}
else
{
//Insere na DIV #resultado o que foi retornado pelas classes de manipulação do Usuário (Se os dados estão corretos ou não)				
$("#resultado").html("Redirecionando...");			
//Gravar o cookie aqui
window.location = 'main';
return true;						
}

//chamar métodos
var ListaPaisesJSON = serverMethods().GetListPaises();


setCredentials é gerado pelo delphi, basta dar include. e depois chamar os métodos do servidor;

essa é a diferença, se fosse o Intraweb o componente PageProducer geraria a página, nao sei como é feito o meio de autenticação desse jeito.

mas como está consumindo WebService é usado javascript para chamar os métodos e obter os dados e escrever na página, a autenticação é feita via javascript numa variavel global,
mas se muda de página a variavel tem que ser inicializada novamente.

espero ter explicado bem.
Responder

Gostei + 0

11/06/2013

Rodolpho Silva

Bem, na minha modesta opinião, você já acertou trabalhando com o conceito de "camadas". Ao disponibilizar um serviço usando rest, você abre uma série de opções que podem ser usadas na camada "thin-client" para conectar ao serviço. Você pode usar na camada visual diversas tecnologias, onde estas conseguem conectar o servidor rest. O Intraweb é usado mais para produzir páginas dinâmicas em Delphi. Age de forma semelhante como o JSP, PHP ou ASP.NET. Se você está usando o Intraweb apenas para produzir conteúdos HTML, eu aconselharia a usar somente o padrão web (HTML + CSS + JS). Usando padrão web na camada client, você pode atingir diversos dispositivos (móveis ou não) com muito mais facilidade.
Responder

Gostei + 0

11/06/2013

Paulo Pinto

Eu estava pesquisando e descobri que serviço REST são stateles, ou seja só faz uma requisição e autenticação e já perde a conexão.

então é assim mesmo que vou trabalhar, vou montar as páginas html com JS, JQuery e css mesmo.

Obrigado Rodolpho, clareou bastante minhas idéas, Abraço.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar