JAAS ou Spring Security? - Programação - GUJ
Tags: #<Tag:0x00007fa6c97097f8> #<Tag:0x00007fa6c9709488>
Murilo_Medeiros Julho 18, 2018, 12:32pm #1
Bom dia a todos, estou querendo implementar login com segurança no meu site, a duvida é, qual desses dois usar e qual é o mais ágil de implementar para usuários advindos do banco de dados (não pretendo usar XML e sim Anotações)
Meu sistema é Java, JSF, Hibernate, JPA
Mike Julho 18, 2018, 12:33pm #2
No título seria JAAS ao invés de SAAS, não?
O JSF possui uma interface chama PhaseListeners, implementando-a você consegue fazer a autorização de qualquer usuário, utilizando código java mesmo.
"Para as aplicações escritas em JavaServer Faces, além da opção de usar servlets filters, estas podem se utilizar de um recurso especifico do JSF chamado da phase listener que é responsável por interceptar e oferecer mecanismos de manipulações referentes as mudanças de eventos ocorridas no ciclo de vida da especificação. Relacionado ao contexto de autenticação e autorização, ela se encaixa perfeitamente para a implementações de controle de usuários, oferendo ao projetista da aplicação mais uma opção arquitetural. Segue abaixo links sobre opções de implementações:
http://archsofty.blogspot.com/2008/11/login-autenticao-e-autorizao-usando.html"
Texto retirado de: https://fernandofranzini.wordpress.com/2009/09/09/autenticacao-e-autorizacao/
PhaseListener além de ser próprio do JSF, é simples de ser utilizado.
Murilo_Medeiros Julho 18, 2018, 12:34pm #3
Bom dia Mike, obrigado pela resposta! Quanto a segurança ela está em um mesmo patamar que os frameworks que eu citei?
Mike Julho 18, 2018, 12:37pm #4
Murilo_Medeiros:
Um PhaseListener é disparado apenas em uma solicitação JSF (isto é, uma solicitação HTTP que chama o FacesServlet). Ele não é disparado quando uma solicitação não-JSF é executada e, portanto, expõe um possível vazamento de segurança em solicitações não-JSF.
Atualmente eu não tive nenhum problema…
javaflex Julho 18, 2018, 12:43pm #5
A segurança estará na sua programação.
Evite salada de frameworks, se estivesse usando a stack Spring tudo bem, mas você está usando a stack Oracle/Sun com JSF. Nunca usei JSF, mas se o que o @Mike falou permite isso dentro do que já é disponível, entao melhor usar.
Mike Julho 18, 2018, 1:15pm #6
Aqui tem um exemplo utilizando PhaseListener.(Acabei de faze-lo)
Como eu disse, é algo do próprio JSF.
public class AutorizacaoPhaseListener implements PhaseListener
Usuario usuario = (Usuario) facesContext.getExternalContext().getSessionMap().get("usuario");/*Pega o usuário da sessão, é possivel injetar um bean que tenha o usuário, mas se o bean tiver x atributos, o processamento ficará mais pesado atoa*/
String paginaAtual = facesContext.getViewRoot().getViewId();
if(paginaAtual.contains("/area-do-cliente-logado.xhtml"))
if(usuario == null)//Se for nulo, o usuario tem que logar antes de acessar a sua area
nh.handleNavigation(facesContext, null, "/login.xhtml?faces-redirect=true");
else //Se tiver logado
if(usuario.getAdmin()) //A página é destinada a clientes,  se for admin, será redirecionado a outra página
nh.handleNavigation(facesContext, null, "/admin/index.xhtml?faces-redirect=true");
else//Se não for admin e estiver acessando a area de cliente
//Mantém na página
else if(paginaAtual.contains("/admin/index.xhtml"))//área destinada a administradores
if(!usuario.getAdmin())//Se NÂO for admin e estiver tentando acessar a area de admin, redirecione para a area do cliente
nh.handleNavigation(facesContext, null, "/area-do-cliente.xhtml?faces-redirect=true");
else //Se for admin e esta tentando acessar a area de admin
darlan_machado Julho 18, 2018, 7:31pm #7
Evite salada de frameworks
O problema é que isso é, de certa forma, padrão.
Já tive o desprazer de trabalhar em projetos que mesclavem, inclusive, Primefaces e Richfaces, só por que o Rich tem uns botões diferentões.
A respeito do tópico, faz uns anos já que não vejo quase nada em termos de JAAS. Sem falar que ele é 100% razão dos argumentos do Spring: depende da plataforma onde você roda.
Além disso, eu ainda acho o Spring Security extremamente verboso, nada intuitivo.
O PhaseListener é, ao meu ver, a opção mais tranquila.
Concordando com o que o @javaflex disse, se você está usando JSF, tente aplicar algo que o JSF já encaixa sem maiores dificuldades.
Agora, se a ideia é utilizar algum SSO ou OAUTH, aí sim, pense em Spring security
Murilo_Medeiros Julho 18, 2018, 11:09pm #8
Terminei de implementar o spring security, ele vem causando alguns bugs na minha aplicacao por exemplo na hora de calcular o total de itens e valor total do carrinho, fiz uma pesquisa rapida sobre o OAuth e por ser uma ferramenta do Google e dedicada ao Java vou repensar minha implementação. Quanto ao phaseListener achei ele um pouco simples demais, posso ter pesquisado pouco sobre ele… Mas a implementação do OAuth me pareceu bastante oportuna Obrigado a todos por responderem meu topico.