Pessoal, procurei por vários lugares e não encontrei, estou querendo criar uma autenticação do tipo “<auth-method>FORM</auth-method>”, tenho meu login, meu bean, tudo certo.
Meu problema é: Eu digito o usuário e a senha, mas não consegui dizer para a session que ela está autenticada e que pode seguir com o processo que no caso é o redirecionamento para a página de menu.
Ela nunca sai da tela de login.
A pergunta é: Como eu faço para dizer a session que ela está autenticada, e que não precisa voltar a página de login?
Eu não quero usar nenhum framework de autenticação, queria fazer uma coisa simples mesmo.
Muito obrigado a todos.
Vou acompanhar esse tópico,ja criei uns 3 tópicos parecidos com o seu e ninguem me respondeu,to precisando da mesma coisa 
Você poderá criar um servlet interceptador, que receberá como parâmetro o nome da página, neste Servlet você fará a validação da sessão que pode ser visto abaixo
HttpSession session = req.getSession();
String user = req.getParameter("userName");
if(user != null) { // authorized
res.sendRedirect(res.encodeURL("suaPagina"));
} else{
// Aqui você encaminha pra pagina de login que registrará o sua sessão.
}
Esta é a forma mais simples que vejo, porém não é a mais elegante, se quiser algo mais eficiente procure por Servlet Filters.
Eu entendi, mas desta forma, o tipo de autenticação que eu informo lá no xml é desnecessária.
O jsf deveria ter um mecanismo que verifica automaticamente se está ou não autenticado.
E é isto que eu gostaria.
De qualquer forma, muito obrigado.
Eu tenho um bean que é responsavel pelo login,nele eu guardo numa variavel o id do usuário logado que é consultado la no banco.Como faço para chamar esse id nas outras classes?
Não tem como você manter o estado seu bean, você tem que adicioná-lo na sessão e depois recuperá-lo como citei acima
O FORM indica que vc quer utilizar o mecanismo de autenticação padrão do Java EE. Para que funcione, é preciso cumprir os seguintes passos:
-
Criar uma página de login, seguindo padrões especificos (action do form: j_security_check, campos de usuario e senha: j_username e j_password)
-
Configurar a forma de autenticação no servidor. Essa parte não é coberta pela especificação, cada servidor implementa à sua maneira. Pode ser através de arquivos de configuração (ex: Tomcat) eu em uma ferramenta de administração (ex: Websphere). Basicamente o que se faz é dizer como os usuários devem ser autenticados. Por exemplo: usar banco de dados XXX, os usuarios estão na tabela YYYY, o campo de login é o ZZZ e o de senha é WW, os grupos (roles) estao na TbKKKK. Enfim, tudo que o container precisa para realizar o processo de login.
Há diversas opções de autenticação (banco de dados, LDAP, arquivo texto, etc) que vem por padrão nos servidores. Para casos mais específicos é preciso escrever seu próprio Modulo de Login.
-
Configurar o acesso a cada elemento da aplicação, através do web.xml (security constraints) ou na aplicação (método isUserInRole).
Resumidamente é isso… no seu caso qual é o andamento, o que já está feito? Fale mais sobre o problema encontrado
tenho um software desenvolvido em delphi, e quero passar o esquema de login e controle de acesso as rotinas.
o esquema é bom, a lógica está pronta e funcionando perfeitamente, por isto não quero mudar para outro esquema, não quero implementar nada com framework, vou montar meu próprio esquema.
Meu problema está sendo em dizer para a session que ela já está autenticada, e que pode tocar o barco, resolvendo este problema, eu consigo resolver o resto.
Resumindo: Vou montar meu esquema de login, não preciso de algum framework ou do servidor de aplicações, eu só preciso saber como dizer para a session que ela está autenticada e que pode sair da tela de login.
Eu posso usar um servlet apenas para o login e chamo-los nos beans normais?
Essa também é uma maneira, devido a motivos diversos muita gente acaba desenvolvendo sua própria solução de segurança ao invés de usar a do Java EE.
No seu caso, as configurações de segurança do web.xml (por exemplo, auth method) não terão nenhuma utilidade.
Basicamente o que vc precisa é:
-
Criar uma classe representando o login de usuário. Cada usuário logado terá um objeto desses na sessão. Se não tiver é porque não está logado.
-
Implementar algo que intercepte cada requisição às páginas - pode ser um Filter, ou um Listener do Jsf. Se o cara tiver uma sessão ativa e tiver o objeto Usuario então Ok, pode passar. Senão é direcionado automaticamente para a página de login. Opcionalmente podem ser feitas outras validações, por exemplo verificar se o usuario possui determinada permissão.
-
A página de login é a parte mais simples. Quando o usuário der o submit de seu login e senha, estes dados serão validados. Se estiver Ok, criar um objeto Usuario e armazenar na sessão, e em seguida direcionar para a pagina principal (usando um redirect normal).
Se estiver incorreto, volta para a tela de login.
Isso tem mais a ver com o que vc está fazendo… ?
gomesrod agora eu entendi.
eu achava o seguinte: Como o meu método de autenticação era o FORM, o JSF jogava para minha página de login pq a currentsession não estava autenticada, eu achava que era só dizer para ela que ela estava autenticada e automaticamente não iria mais chamar o form de login, é assim que funciona no .NET, achei que o java também seria igual.
Mas com vc falando que não vai me servir a autenticação do tipo FORM, pq ela é baseada em cima do servidor de aplicações, eu entendi que a história é diferente no Java, vou tentar implementar o Filter, não sei como fazer isto, mas vou fazer aqui
Vc tem algum exemplo de uma página com filter?
Até que não seria mau se fosse desse jeito
Parece bem prático.
Sobre o filtro, existem vários exemplos pela Internet. Faça uma pesquisas por java authorization filter ou java filtro seguranca
gomesrod, obrigado pela força, consegui implementar com o filter, está tudo ok
Luciano_Lopes, acho que esta solução é a única saída para nós.
[quote=Raiduster]gomesrod, obrigado pela força, consegui implementar com o filter, está tudo ok
Luciano_Lopes, acho que esta solução é a única saída para nós.
[/quote]
Fazer oque né?O ruim é que não sei trabalhar com servlets direito,vou ter que dar uma pesquisada.
Raiduster, você poderia postar o código do login aqui para eu ver como você resolveu o problema?