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
Como criar sessões de usuarios?
15 Respostas
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"
}
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.
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.
Aplicação Desktop AbelBueno
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.
Só não sei como realmente posso fazer, isso queria so um pequeno exemplo, para da um start
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.
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
public class Usuario{
String user = null;
String tipo = null;
gets and sets...
public String getTipo(){
return tipo;
}
}
dae lá no cliente:
if(Usuario.getTipo().equals("admin")){
explodeAMaquina();
}else{
ExibeMensagem("Você não está autorizado a explodir a máquina, pq vc é mero mortal");
}
è uma vez fiz assim. só não utilizei os setVisible(). eis ae o problema kk, e tambem pegar a istancia de quem está logado
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.
Obrigado pela ajuda sowyer, vou da uma olhada aqui.
Realmente ainda tenho que estudar muito, pattern, mvc entre outros…
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 !! 
Beleza, entendi um pouco. Agora me da só uma luz como setar Botões e Menus de acordo com o usuario? heheh