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.
Vou acompanhar esse tópico,ja criei uns 3 tópicos parecidos com o seu e ninguem me respondeu,to precisando da mesma coisa
E
ederfreitas
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
HttpSessionsession=req.getSession();Stringuser=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.
R
Raiduster
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.
L
Luciano_Lopes
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?
E
ederfreitas
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
G
gomesrod
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
R
Raiduster
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.
L
Luciano_Lopes
Eu posso usar um servlet apenas para o login e chamo-los nos beans normais?
G
gomesrod
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… ?
R
Raiduster
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?
G
gomesrod
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
R
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.
L
Luciano_Lopes
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.
Fazer oque né?O ruim é que não sei trabalhar com servlets direito,vou ter que dar uma pesquisada.
L
Luciano_Lopes
Raiduster, você poderia postar o código do login aqui para eu ver como você resolveu o problema?