Autenticação usando Flex

6 respostas
prog.tiago

Boa noite amigos,

Desenvolvi uma tela de login utilizando Flex integrado a Java via BlazeDS. Utilizei Spring e Hibernate.

Vejam:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx"
			   xmlns:valueObjects="model.valueObjects*"
			   xmlns:services="services.*"
			   xmlns:valueObjects1="model.valueObjects.*"
			   minWidth="955" minHeight="600" currentState="autenticacao">

	<s:states>
		<s:State name="autenticacao"/>
	</s:states>
	
	<fx:Script>
		<![CDATA[
			
			
			import mx.controls.Alert;
			import mx.rpc.events.ResultEvent;
			protected function tenteLogin_resultHandler(result: ResultEvent):void
			{
		
				if(result.result as Boolean==true){
					Alert.show("Autenticado","Autenticou?");
					
				}else{
					Alert.show("NÃO Autenticado","Autenticou?");
				}
			}
			
			protected function logar():void
			{
				tenteLogin.token=usuarioService.autentica(usuario);
			}
		]]>
	</fx:Script>
	
	<fx:Declarations>
		<valueObjects1:UsuarioVO id="usuario"/>
		<services:UsuarioService id="usuarioService"/>
		<s:CallResponder id="tenteLogin" result="tenteLogin_resultHandler(event)"/>
		
		<!--Validadores-->
		<mx:EmailValidator id="val1" property="text" required="true" source="{email}"
						   trigger="{btLogin}" triggerEvent="click"/>
		<mx:Validator id="val2" property="text" required="true" source="{pass}" trigger="{btLogin}"
					  triggerEvent="click"/>

		
	</fx:Declarations>
	<s:Panel width="303" height="191" horizontalCenter="-1" title="Autenticação" verticalCenter="4">
		<s:Button id="btLogin" x="225" y="129" label="Login">
			<s:click>
				<![CDATA[
					if(Validator.validateAll(new Array(val1,val2)).length==0)
					{
						logar();
					}else
					{
						errorMessage.text="Corriga os erros apresentados";
					}
				
				
				
				]]>
			</s:click>
		</s:Button>
		<s:Label id="errorMessage" x="20" y="130" width="197" color="#F82217" fontWeight="bold"/>
		<s:Label x="38" y="40" fontWeight="bold" text="email:"/>
		<s:Label x="38" y="76" fontWeight="bold" text="password:"/>
		<s:TextInput id="email" x="109" y="31"/>
		<s:TextInput id="pass" x="109" y="69"/>
	</s:Panel>
</s:Application>

Minha dúvida, preciso salvar o objeto USUARIO que é o que de fato autenticou numa camada para que as outras janelas saibam quem está logado. Como posso fazer isso?

O que vocês me sugerem?

Abraços

6 Respostas

F

Tiago,
Utiliza o pattern Singleton http://fabiophx.blogspot.com/2009/05/metodo-construtor-singleton.html

[]s
Fabio da Silva

prog.tiago

Obrigado Fabio,

Um outro colega me sugeriu a seguinte implementação:

[Bindable]
    public class VariaveisGlobais {
        private static var instance:VariaveisGlobais;
        
        public var currentUsuario:Usuarios;
        public static function getInstance():VariaveisGlobais {
            if (instance==null) {
                instance = new VariaveisGlobais();
            }
            return instance;
        }
    }

Vi essa como mais simples. O que você acha?

Abraço

F

Tiago,
Do jeito q vc colocou não impede de dar new VariaveisGlobais().
Esta q vc postou é similar (faltando o tratamento do construtor) a q postei como comentário do meu post no meu blog q coloquei antes, do Mário Santos.
Dá uma olhada no comentário do blog tb.

[]s

xdraculax

Também faria isso, colocaria na Application uma varíavel pública e bindable chamada usuarioLogado.

horochovec

Utilizar variáveis publicas funciona perfeitamente no Application mas é o melhor para a aplicação?

Vamos dizer o seguinte, você precisa acessar essa informação em outras classes/telas da sua App, irá utilizar o FlexGlobals a todo momento?

(FlexGlobals.topLevelApplication as spark.components.Application).seuObjeto

Vamos piorar, um dia você precisa mudar o nome do teu objeto, terá que refatorar o teu código todo por causa disso.

A melhor opção é usar o singleton, nessa classe você poderá armazenar mais coisas, e não apenas o teu usuário logado no sistema.

Abraço

xdraculax

Não, aqui usei uma variável estatica no Application. Ficou MinhaApp.usuarioLogado.

Mas isso foi no SDK Flex 3.6, no Spark pelo visto mudou bastante.

Criado 20 de outubro de 2011
Ultima resposta 26 de out. de 2011
Respostas 6
Participantes 4