Como fazer autenticação de usuários?

Como vocês fazem autenticação de usuários? Eu estou fazendo um sistema que precisa ter controle de usuários, com permissão de acesso a telas e operações como exclusão, alteração e inclusão.

Eu acabei implementando tudo, salvando no banco de dados os dados de logins e as permissões de cada tela. Eu guardo os dados do usuário na session e a cada tela que o usuário entra eu confiro no banco quais as operações ele pode executar em cada tela e só então eu monto a tela personalizada.

O que eu fiz até que ficou bem eficiente, mas eu acho que estou reinventando a roda e queria saber se há algum modo “padrão” de fazer esse tipo de controle.

P.S.: Estou usando Struts. :cool:

Acho que está correto o modo que você descreve…
Se cada tela tem permissões diferentes para determinados usuários, a maneira que eu faria seria essa também…

Quem sabe na medida em que as telas forem sendo chamadas, elas já poderiam ser cacheadas, evitando o reprocessamento no banco… no mais td ok :wink:

[]'s

Só p/ registrar se alguém precisar no futuro:
Eu construi minha solução usando um filtro que checa a cada requisição se há uma sessão para o usuário e se há um objeto usuário. Se não tiver ele encaminha o usuário para a página de login. Se existir um usuário na sessão eu checo as permissões do usuário e monto a tela personalizada.

A classe RequestProcessor do Struts também pode ser usada para interceptar as requisições do usuário, mas eu não preciso de nenhum mecanismo sofisticado, então eu só adicionei um filtro que é aplicado a todos os *.jsp.

Fabio,

eu tbm utilizo desta forma, através de filtros, no tomcat.

O único problema que eu vejo na sua solução, é vc ter q acessar o banco de dados cada vez que o usuário faz uma requisição, isto altera a performance da tua aplicação.

Eu aconselharia vc a ler somente na primeira vez q o usuário acessar o sistema, e carregar estas informações na memória, e nas próximas vezes vc acessa os dados da memória, o q é mais “barato” para o sistema.

[]'s

Já comentaram isso comigo. Como meu sistema é pequeno e usa pool de conexões eu implementei dessa maneira mesmo. Se no futuro houver necessidade eu já deixei preparado para mudar para a sessão os dados.