Autenticação Filter OU JAAS

Bom dia a todos, estou começando a desenvolver aplicativos web com JSP e Servlet e estou implementando um meio de autenticação, mas vi alguns tutoriais na internet e fiquei com algumas duvidas.
Algumas implementações utilizavam JAAS e outras Filter, mas mesmo gostando mais do filter achei meio parecido com uma “Gambiarra”.

A questão é. qual a melhor maneira de implementar a autenticação em um aplicativo web?

Muito Obrigado a todos!

tioola,

tudo vai depender de quão seguro você - ou o cliente - vai querer que a aplicação seja.

Reflita sobre isso primeiro para definir a melhor abordagem.

Na minha opinião, Filters não são gambiarra e são ótimos. Tudo depende de como você irá usá-los.

Dica: se possível, utilize JSF, que é uma “evolução” do JSP e Servlets.

Um abraço.

[quote=jMarcel]tioola,

tudo vai depender de quão seguro você - ou o cliente - vai querer que a aplicação seja.

Reflita sobre isso primeiro para definir a melhor abordagem.

Na minha opinião, Filters não são gambiarra e são ótimos. Tudo depende de como você irá usá-los.

Dica: se possível, utilize JSF, que é uma “evolução” do JSP e Servlets.

Um abraço.[/quote]

Acredito que segurança nunca é demais hehe.

O meu proximo passo é aprender JSF mas estou me aprofundando um pouco mais em JSP e Servlets.

No seu caso você acredita que filters sejam a melhor opção em segurança?

Muito obrigado! :smiley:

Olá,

Oficialmente, se você é um cara sério tem que usar JAAS com autenticação/autorização gerenciadas pelo container.

Mas nos meus últimos projetos acabamos enfrentando muitas limitações nessa técnica, que dificulta qualquer customização no processo de login. Hoje se for iniciar um projeto e alguém me perguntar, minha opinião é de que implementar na mão (Filter) seria melhor.

Ah, complementando:

Tem a opção do Spring Security. Já ouvi algumas pessoas dizerem que ele é a melhor maneira de implementar a segurança da aplicação.
Baseado no que o Spring costuma oferecer, eu não duvido, mas ainda preciso tirar um tempo para experimentá-lo.

Por que não faz o mesmo? :slight_smile:

Os dois protegem do mesmo jeito, e se mal utilizados, vão provocar falhas de segurança do mesmo modo.

Use um ou o outro, tanto faz. Ambos trarão proteção do mesmo modo.

Quando falamos nesse assuntos ficamos sempre pensando o que usar, o JAAS , Spring security ou fazer um filter mesmo, JAAS e Spring security eles por de baixo dos panos sao filtros, no meu posto de vista o filter é melhor porque se voce quiser fazer algo a mais não sera tao dificil interceptar as chamadas e tal mas sair do baisco com jaas ou sprin security não é tao facil assim…

Muito obrigado a todos , optei em criar um filter pois, alem de me agradar mais, posso customizar facilmente.

Agradeço o tempo e atenção de todos! :smiley:

Essa foi boa…se vc for um cara sério…mas se vc é do tipo brincalhão faz com Filter !!!

Tioola só pra ficar registrado o Filter não realiza autenticação, e sim uma verificação.

Quando realizamos o login estamos nos autenticando para isso você pode escrever seu próprio trecho de código com um banco de dados ou com JAAS. Se a autenticação for bem sucedida, cabe ao filtro verificar se você pode executar aquela ação (se vc estiver trabalhando com regras/permissões)

Cabe ao Filter tb a verificação de alguém não autenticado acessando um recurso que requer autenticação.

abraços

Se vc não estiver usando Java EE, vc estiver disposto a programar a segurança da tua aplicação e a aplicação só puder ser acessada via servlets, filters dão conta.
Se vc estiver usando um servidor de aplicação e quiser deixar o container cuidar da segurança por vc, JAAS deve ser a escolha.

Imagine que vc tenha um EJB que só pode ser acessado por admins.

@Stateless(name = "faceid-UserImpl")
@RolesAllowed(value = {"solution-admin"})
public class UserImpl {
  .
  .
  .
}

Se vc utilizar JAAS, quando qualquer objeto do sistema chamar a classe acima, o container vai verificar se o cara que fez o request faz parte go grupo ‘solution-admin’.
Se vc utilizar um filter, esse filter fará a verificação no servlet apenas. Se esse servlet acessar outros serviços, cabe a vc implementar a seguranca que pode ser oferecida pelo container.

Eu prefiro a solução com JAAS.
É tão flexivel quando um filtro, basta implementar o módulo JAAS personalizado.
Porque implementar um filtro de segurança, sendo que o JAAS não deixa de ser um filtro porém pronto para o uso, já testado pelos desenvolvedores do container.
Com JAAS você pode utilizar SSO (Single sign-on) disponíveis nos containers, onde várias aplicações podem compartilhar o mesmo controle de acesso.
Como já citado acima se você estiver utilizando EJBs, JMS, WebServices, etc todos estes serviços podem utilizar JAAS na segurança.
Concluindo, JAAS é uma solução completa de segurança para aplicações JEE.

[quote=tioola][quote=jMarcel]tioola,

tudo vai depender de quão seguro você - ou o cliente - vai querer que a aplicação seja.

Reflita sobre isso primeiro para definir a melhor abordagem.

Na minha opinião, Filters não são gambiarra e são ótimos. Tudo depende de como você irá usá-los.

Dica: se possível, utilize JSF, que é uma “evolução” do JSP e Servlets.

Um abraço.[/quote]

Acredito que segurança nunca é demais hehe.

O meu proximo passo é aprender JSF mas estou me aprofundando um pouco mais em JSP e Servlets.

No seu caso você acredita que filters sejam a melhor opção em segurança?

Muito obrigado! :smiley: [/quote]

Olá.
Como eu já informei, na minha opinião, a melhor opção em segurança vai depender do quão segura sua aplicação terá que ser.
Existem muitas opções de segurança disponíveis. Caberá a você decidir - ou apresentar para seu cliente escolher, se for possível - qual a melhor para o projeto.

Dependendo da complexidade do projeto, uma análise comparativa poderá ajudar muito, inclusive em projetos futuros.

Você poderá considerar, por exemplo:

  • XACML, que é padronizada pela OASIS: possui linguagem para controle de acesso e linguagem para resposta/requisição.
  • JAAS, que é uma extensão da tecnologia Java e traz um framework construído sobre a arquitetura do Java Security, com foco em autenticação/autorização.
  • Java ACL, que é um pacote Java que provê interfaces necessárias para implementação de uma lista de controle de acesso.

Um projeto que pode ser usado em conjunto com o Spring Security, por exemplo, é o Jasypt, que é simples e eficiente. Também vale a pena dar uma olhada.

Agora imagine se, após um mega-projeto que já estiver em produção, tiver seus requisitos de segurança alterados - não por uma falha de projeto, mas devido a alterações imprevistas na política de segurança do cliente, por exemplo. Nesse caso, após as alterações, se você estivesse usando JAAS, por exemplo, seria possível fazer uma análise do fluxo descrito nas joint actions do JAAS para ajudar a encontrar falhas e checar a consistência da descrição utilizando o Alloy.

Enfim, tudo vai depender de quanta grana, tempo e risco estará envolvido no projeto.