Como criar sessões de usuarios?

15 respostas
Hewerson

Boa noite, ultimamente me deparei com um pequeno problema, como limitar acesso a determinadas sessões da aplicação a usuários não cadastrados com certos privilégios, queria saber como posso fazer, para um Usuário comum, Não acessar as mesmas telas que o Administrador do sistema irá acessar, pensei em algo usar login, com setVisible(), mas não sei como fazer gostaria de umas dicas. desde de já obrigado

15 Respostas

zerokelvin

Sei q existem bibliotecas q fazem isso, mas nunca utilizei. Prefiro um modo mais simples… tanto no sistema cliente quanto na thread q atende o cliente no servidor mantenho uma variável com o nome do usuario e nivel, dae vc gerencia!!!

if(nivelUsuario.equals("admin")){
 responda com o objeto solicitado
}else{
return "Usuário não autorizado"
}
Hewerson

Ideia boa, ruim só é gravar todos privilegios em banco. e fazer os setVisible(), um a um. em botões, e menus, sabe quais APIs facilitam.

A

Apenas para referência: sua aplicação é web ou desktop?

Em algum lugar esses privilégios terão de estar cadastrados. Pode ser um xml, no banco, etc.

Além de dar setVisible, é uma boa prática testar numa “camada abaixo” se o usuário tem direito a realizar determnada operação.
As vezes alguma operação pode ser executada de mais de uma forma e passa batida pelo programador.
Considerando claro, que exista uma camada abaixo na sua aplicação.

Hewerson

Aplicação Desktop AbelBueno

zerokelvin

o melhor é vc fazer isso, por exemplo, no seu servidor. É bem mais seguro e simples. Crie um objeto Usuario com o que precisa, tipo nome, senha, privilegios, nivel etc… nao tem erro.

Hewerson

Só não sei como realmente posso fazer, isso queria so um pequeno exemplo, para da um start

zerokelvin

o melhor é vc fazer isso, por exemplo, no seu servidor. É bem mais seguro e simples. Crie um objeto Usuario com o que precisa, tipo nome, senha, privilegios, nivel etc… nao tem erro.

Hewerson

Minha aplicação é desktop, teria de aplicar setVisible em botões e menus. mas não sei como devo salvar tudo isso e como retornar para a aplicação

zerokelvin
public class Usuario{

String user = null;
String tipo = null;

gets and sets...

public String getTipo(){
return tipo;
}

}

dae  no cliente:

if(Usuario.getTipo().equals("admin")){
explodeAMaquina();
}else{
ExibeMensagem("Você não está autorizado a explodir a máquina, pq vc é mero mortal");

}
Hewerson

è uma vez fiz assim. só não utilizei os setVisible(). eis ae o problema kk, e tambem pegar a istancia de quem está logado

sowyer

Você pode criar uma classe Session que implemente o padrão Singleton ( garante apenas uma instancia da classe enquanto a aplicação estiver rodando ). E nela ter uma lista com os usuários logados.

Alem de outros atributos referente a sessão… como o tempo de permanência e etc …

Logo, você irá manter nesse classe, todas as instancias dos usuários logados.

Você pode fazer algo como:

O formulário de login e senha é submetido, o sistema vai no banco e verifica se esse usuário já existe e o retorna. O sistema agora verifica as suas permisões, e identifica que é um administrador.
O sistema insere este usuário na sessão.

Hewerson

Obrigado pela ajuda sowyer, vou da uma olhada aqui.

Hewerson

Realmente ainda tenho que estudar muito, pattern, mvc entre outros…

sowyer

Para implementar o padrão Singleton é bem simples. Basta você seguir 4 passos basicos:

1 - Prover um construtor padrão privado.

public class Session {
	private Session(){}
}

2 - Criar um método para obter a referência para o objeto Singleton ( propria classe )

public class Sessao {
	private static Sessao sessao;
	private Sessao(){}
	
	public static Sessao getInstancia() {
		if( sessao == null ) {
			sessao = new Sessao();
		}
		
		return sessao;
	}
}

3 - Marcar o metodo como Sincronizado para evitar problemas caso você use Multi-Thred

public static synchronized Sessao getInstancia() {
	if( sessao == null ) {
		sessao = new Sessao();
	}
	
	return sessao;
}

4 - Sobrescrever o metodo clone() para evitar a clonagem de objetos.

public Object clone() throws CloneNotSupportedException {
	throw new CloneNotSupportedException();
}

Um código para uma classe de Sessao poderia ser assim:

public class Sessao {
	private static Sessao sessao;
	private Set<Usuario> usuarios;
	
	private Sessao(){}
	
	public static synchronized Sessao getInstancia() {
		if( sessao == null ) {
			sessao = new Sessao();
		}
		
		return sessao;
	}
	
	public Object clone() throws CloneNotSupportedException {
		throw new CloneNotSupportedException();
	}
}

Caso tenha alguma outra duvida, por favor, só falar ! Quem não se comunica, se trumbica !! :wink:

Hewerson

Beleza, entendi um pouco. Agora me da só uma luz como setar Botões e Menus de acordo com o usuario? heheh

Criado 31 de agosto de 2011
Ultima resposta 4 de set. de 2011
Respostas 15
Participantes 4