Modelagem segura com Servlet/JSP/JavaBeans

Olá,

Estou desenvolvendo um sistema para rodar em uma intranet, e estou usando Servlet/JSP/JavaBeans (não EJB). Até aqui tudo bem, mas não estou conseguindo pensar num modelo coerente e seguro.

Por exemplo, para cadastrar um dado, eu uso uma página JSP que chama um Bean (<jsp:useBean …>) que faz o cadastro e retorna uma mensagem de erro ou sucesso do cadastro. Por medidas de segurança essa não seria a forma adequada, pois o usuário poderia digitar diretamente o endereço da página, passar os parâmetros adequados e executar a operação. Antes ele deveria passar por um gerenciador para verificar se o mesmo tem permissão para a tarefa.

Estive pensando na seguinte estrutura: a requisição é passada para o Servlet, que faria uma consulta ao Manager para verificar se o usuário tem permissões para realizar a tarefa, e o Manager retornaria uma resposta para o Servlet que "despacharia" a requisição para a página adequada (cadastro ou erro).

Alguém teria alguma sugestão?



Obrigado.



Adriano.

Olá,



é uma boa solução. Não é necessário mas, sempre é bom tentar manter beans, como o que verifica permissões, de uma forma genérica. Ou seja, não amarrado a um servlet. Isto facilita a portabilidade para uma aplicação Swing, por exemplo.

Outra opção seria usar um filtro.

Minha preocupação maior é o acesso direto aos arquivos .jsp, pois assim o usuário pode obter informações sem autenticação prévia. Se a requisição passar pelo Servlet de controle, tudo bem, mas um usuário mais entendido pode acessar diretamente o arquivo e obter informações que não seriam licitas a ele! Talvez houvesse alguma outra maneira de bloquear os JSPs, sei lá…

Mas vc entendeu meu problema? Tenho a sensação de estar no caminho errado…

Outra coisa, numa aplicação como essa, são nos beans que devem manipular a comunicação com o banco??





Adriano.

Você poderia usar variáveis de sessão para cuidar disso…



a cada página JSP vc teria um controle no cabeçalho da página para controlar a entrada na página.



Quando o usuario logar , vc atribui um status "OK" a uma variavel de sessão…e a cada página que ele entrar vc testaria esta váriavel de sessão para verificar se o status dela esta com o valor correto.("Ok").caso não esteja ele é redirecionado diretamente para a página de login.Assim empediria do usuario conseguir acessar páginas diretamente pela URL.





Se vc estiver utilizando diferentes tipos de usuários…vc pode controlar por estes tipos…tbm utilizando as váriaves de sessão…



Acho que assim funciona…ja fiz assim e deu certo…





[]´s…



Felipe.



Olá,



existem muitas maneiras de fazer. A que o Pittella sugeriu, é provavelmente a mais usada. Não gosto muito desta opção, pois ela usa regra de negócios numa view, o que já torna o sistema "menos MVC".

Como disse antes, udar o Pattern Intercepting Filter seria a melhor opção:

<A HREF="http://www.portaljava.com/home/modules.php?name=News&file=article&sid=80" TARGET="_blank">Intercepting Filer Tutorial

Com um filtro vc pode mapear um direterio inteiro, ou até .jsp para serem acessados apenas se o usuário possui autenticação nível X, por exemplo.



O próprio Tomcat possui uma política de autenticação de usuários, com níveis de restrições, totalmente configurável e tudo mais. Esta eu nunca usei, mas esta eu nunca usei pra opinar.

Quote:
Outra coisa, numa aplicação como essa, são nos beans que devem manipular a comunicação com o banco??




Denovo, existem várias formas, cada qual com suas vantagens.

A melhor maneira é usando o Pattern Data Acces Object(DAO) mas, ele é um tanto complexo:

<A HREF="http://www.portaljava.com/home/modules.php?name=News&file=article&sid=121" TARGET="_blank">DAO Tutorial



Atenciosamente,

Franklin Samir

www.portaljava.comtambém!

[ Esta mensagem foi editada por: Franklin em 21-03-2003 14:05 ]

Só para continuar/estender um pouco a discussão. O Struts é um framework do modelo ´mvc´, correto? Alguem aqui já utilizou esse framework? Recomendaria?



[ ]´s





André

Olá,



sim, uso atualmente no projeto www.javanuke.org. Recomendo fortemente.



ps. Seria melhor se postasse um tópico novo sobre este assunto.