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?
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
guilhermeleite
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.
pronto todas as chamadas a sua aplicação passarão pelo Filter
então basta fazer algo tipo:
publicvoiddoFilter(ServletRequestreq,ServletResponseres,
FilterChainchain)throwsIOException,ServletException{
Usuariousuario=(Usuario)req.getSession().getAttribute("usuario");if(verificaSessao(usuario))chain.doFilter(req,res); // deixa o fluxo continuar normalmenteelse{
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
sziliotti
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.
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!!