estou modelando uma aplicação seguindo o modelo MVC.
Nesta aplicação, temos que validar os usuários quando estes forem executar uma ação, exemplo:
“1. O sistema verifica se o usuário que está logado tem permissão para poder alterar um departamento.”
Desta forma, eu tenho os meus beans, os DAO e o controlador da aplicação. Em um primeiro momento, em cada chamada de método do controlador, como por exemplo gravarDepartamento(), deve ser feita a validação de permissão do usuário, então eu pensei em fazer a validação dentro deste método. Mas vejo que isso não seria uma boa prática, pois este método deve simplesmente definir como gravar o departamento e não como validar se um usuário tem permissão para isso.
Então comecei a pensar em criar uma classe que faria todas estas validações em métodos específicos e este métodos seriam chamados pelo controlador, ou seja, o método gravarDepartamento() iria ativar o método verificaPermissaoGravarDepartamento().
Bom, aih eh q surge a dúvida: qual padrão devo utilizar para fazer isso?
O que geralmente é feito em aplicações web e de maneira relativamente simples é utilizar um ServletFilter para interceptar as chamadas HTTP. A partir das URLs, que geralmente representam “Actions” do seu sistema, são verificadas as permissões para prosseguir a solicitação.
Eu tenho um sistema que utiliza esse recurso, eu uso um método com dois tipos de validações do usuário (sei que não pode ser o mais correto e deve existir melhores por aí).
Tenho uma classe Global que implementa apenas um bean Usuario representando o usuário conectado.
Mas no meu caso no momento da montagem dos menus já é desabilitado o acesso a tudo que esse usuário não tem permissão para acessar.
O legal seria usar EJB com as anotations em cima de cada método dizendo qual role pode usar o método. Foi uma sacada interessante da SUN. Fora isso o máximo que um servidor WEB que segue as especificações da SUN oferece é mapeamento por URL’s.
Já ouvi falar do JAAS, não conheço mas as pessoas que o recomendaram eram de confiança daqui do forum.