Validar tipos de usuário diferente

9 respostas
renandemelo

Pessoal,

Estou com uma dúvida, possuo uma aplicação Web com Struts que possui usuários de diferentes níveis de acesso: Usuário comum, administrador, etc. Por questões de segurança preciso diferenciar estes tipos de usuário e permitir acesso a algumas páginas e arquivos de acordo com o tipo de usuário, alguém tem uma boa solução?

Flw,
Renan

9 Respostas

F

Um exemplo simples é vc usar a seguinte ideia, Usuario, Perfil de Usuario ou apenas controle de acessos dierto com nome da pagina ou action e suas acões inclusao, exclusao etc.;

quando acessar a pagina login, grave as entidades do usuario a uma sessão, e em todas chamadas das action vc pega se a sessao esta valida se ainda nao expirou correto, e trata seus acesso. esse usuario pode acessar essa action para consulta, exclusao etc.

Deu para entender ?

Agora tem uma coisa mais simples que acabei vendo hj, um dos analista responsavel aqui implantou apenas para quebra galho,
conhecido como Java Security.

[]'s

[]'s
Fernando

Jair_Rillo_Junior

Não permita que o usuário abra um arquivo .JSP diretamente, faça com que ele sempre passe por uma Action antes de abrir um JSP, assim dentro da Action você pode validar de que grupo o usuário pertence e se ele pode ou não acessar aquele JSP.

Se você puder mudar de estrutura (digo abandonar o Struts e usar outra framework MVC) eu aconselharia a testar o Mentawai que já implementa isso que você precisa através de taglibs.

G

Cara procura dar um olhada em JAAS. Ele é muito bom pra isso.

ddduran

Bom dia Renan,

para você não ter que por seu código de controle de acesso você pode usar um Filter, ou seja uma classe que implementa a interface
javax.servlet.Filter.

então declara-la no seu web.xml

FilterController consuldata.control.FilterController FilterController /*

pronto todas as chamadas a sua aplicação passarão pelo Filter
então basta fazer algo tipo:

public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) throws IOException, ServletException {

 Usuario usuario = (Usuario)req.getSession().getAttribute("usuario");

if(verificaSessao(usuario))
chain.doFilter(req,res); // deixa o fluxo continuar normalmente
else{
rd = req.getRequestDispatcher("/jsp/erro.jsp");
rd.forward(req,res); // dispacha pra outra pagina
}

[]s espero que ajude

mcruz

Cara, vc pode usar qq coisa: Filtros, Servlets, só não use JAAS nem outras “soluções” que usem JAAS (JGuard, p.ex.) senão vc vai ficar sem suporte nenhum de qualquer forum, pois ou o pessoal não usa isso, ou não querem compartilhar os problemas que enfrentaram para fazê-lo funcionar. Postei uns tópicos aqui pra ver se alguém me ajudava com JGuard mas ninguém respondeu… Tive que implementar um esquema de autorização de conteúdo muito dooooooido usando Studio Creator. Também sugiro que vc não poste suas próprias soluções para autorização aqui, pois o pessoal vai dizer que vc deve usar o JAAS (só não sabem como).

saoj

JAAS está na contramão do mundo. É da época que EJB era a coisa mais maravilhosa do mundo Java.

Minha opinião pessoal…

renandemelo

ddduran,

Gostei da idéia dos filtros, só que queria ter um jeito de colocar um filtro para cada tipo de acesso. Por exemplo,eu possuo o seguinte problema, possuo 3 tipos de usuário, cada 1 dos 3 pode acessar algumas ações e etc. Eu preciso saber o tipo de ação que este cara está tentando acessar para poder diferenciar o tipo dele e se a ação que ele quer acessar permite este acesso. Este filtro que você me colocou de exemplo praticamente checa se o usuário está autenticado.Não sei se me expliquei bem, mas é isso, alguma dica?

S

E ae Renan, blz?
Então um solução que eu implemento em quase todos projetos é a seguinte.

Na base de dados tenho 2 tabelas, Usuario e Perfil; cada usuário relacionado a um perfil(Administrador, Operador, etc). Na tabela Perfil eu gravo as actions que ele tem acesso(exibriRelatorio.do, alterarUsuario.do, etc). Detalhe, todo esse controle faço através de uma tela no sistema normal de Administracao, onde o usuario ao criar/alterar um Perfil, ele escolhe quais funcionalidades a esse perfil.

O todo o controle eu faço atraves de um Filter, onde eu verifico se o usuario esta logado e se ele tem permissão para acessar aquele Action que esta acessando.

EX:

HttpSession sessao= req.getSession();

if(sessao.getAttribute(usuario) == null){	        	

String url= sessaoExpirada.do;
resp.sendRedirect(url);	            
            return;
        }else{
        	//verifica controle de acesso	        	         
 	        UsuarioMagist usuario= (UsuarioMagist) sessao.getAttribute("usuario");
 	        
 	        String path= req.getServletPath();
 	        if(path.equals("")) path= req.getPathInfo();
 	        if(path.indexOf("/")>-1) path= path.substring(1);
 	        
 	        if(usuario.getPerfil().getModulosAcesso().contains(path)){
 	        	filterChain.doFilter(request, response);
 	        }else{
	        	String url= "acessoNegado.do";             
	            resp.sendRedirect(url);	            
	            return;
	        }
renandemelo

Gente,

Queria agradecer muito a vocês, me ajudaram muito e por causa de vocês cheguei a uma boa solução, acabei usando filters mesmo como nossos colegas daqui mesmo me disseram, muito obrigado a todos!!

Flw,
Renan

Criado 14 de novembro de 2006
Ultima resposta 16 de nov. de 2006
Respostas 9
Participantes 8