Fala Galera!
Fiz um sisteminha de Logon usando Struts. Na Action que valida nome de usuário e senha eu crio uma sessão pro login e redireciono para a pagina seguinte, exemplo Welcome.jsp, depois de logado.
Minha dúvida é o seguinte: Como que eu faço pra bloquear o usuário de usar com a url da Welcome.jsp e entrar sem se logar usando as tags do Struts pra poder verificar se a sessão login foi criada e assim permitir o acesso a Welcome.jspm, caso contrario redireciona-lo para pagina de login.
Testar sessão com Struts
8 Respostas
Para esta finalidade utilize Filters
http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/Filter.html
Filters rodam antes e depois de seus servlets e (ou) actions do struts, ai vc validaria se algum usuário está indo para uma action não permitida.
Flw,
Renan
Mas como faço pro Filter fazer isso antes de um jsp ser carregado?
Porque a ordem do meu sisteminha é essa:
index.jsp redireciona para welcome.jsp, que possui o form pra login. Ao efetuar o submit é chamado um ActionForm e depois a Action que valida o ID e a Senha. Ao validar, ocorre um forward pra página Main.jsp.
Onde que eu coloco o filter nessa historia?
Cara,
Então, vou te mostrar como eu fiz no meu caso para você ter uma idéia, ok?
Meu sistema era parecido, tinha uma página que enviava login e senha para uma action e esta autenticava o usuário, a idéia é que esta action caso autentique o usuário grave algo na sessão (HttpSession) dele, como um objeto Usuário ou algo assim, para você poder verificar quem é ele e tudo mais durante a sessão. Até ai espero que tudo bem…
Então, os filters funcionam da seguinte forma, você mapeia um Filter no arquivo web.xml para rodar em um determinado padrão de url (mais ou menos como um servlet), mas então, o que vc faria é criar um diretório chamado ‘/usuario/’ ou alguma coisa assim no seu projeto e colocar seus jsps que devem ser “protegidos” de usuários não autenticados neste diretório e as actions que devem ser protegidas comece o path delas com “/usuario/acaoDesejada.do” ou alguma coisa assim. Ai você mapeia no web.xml um Filtro por exemplo AutenticacaoFilter e mapeia ele para rodar com o padrão de url “/usuario/*” ai ele vai rodar com qualquer requisição com este padrão.
Então dentro deste Filter você consegue acessar o HttpSession deste usuário e verificar se este está autenticado ou não, caso não esteja você redireciona ele para uma página de sessão expirada ou algo assim.
Verifique na internet como mapear Filters e seu problema deve estar resolvido, qualquer coisa é só falar.
Flw,
Renan
Tem um artigo sobre Filters aqui no GUJ
no Struts … não sei se é a mesma coisa que no Struts 2… mais … se for o 2 … use interceptors
Cara,Então, vou te mostrar como eu fiz no meu caso para você ter uma idéia, ok?
Meu sistema era parecido, tinha uma página que enviava login e senha para uma action e esta autenticava o usuário, a idéia é que esta action caso autentique o usuário grave algo na sessão (HttpSession) dele, como um objeto Usuário ou algo assim, para você poder verificar quem é ele e tudo mais durante a sessão. Até ai espero que tudo bem…
Então, os filters funcionam da seguinte forma, você mapeia um Filter no arquivo web.xml para rodar em um determinado padrão de url (mais ou menos como um servlet), mas então, o que vc faria é criar um diretório chamado ‘/usuario/’ ou alguma coisa assim no seu projeto e colocar seus jsps que devem ser “protegidos” de usuários não autenticados neste diretório e as actions que devem ser protegidas comece o path delas com “/usuario/acaoDesejada.do” ou alguma coisa assim. Ai você mapeia no web.xml um Filtro por exemplo AutenticacaoFilter e mapeia ele para rodar com o padrão de url “/usuario/*” ai ele vai rodar com qualquer requisição com este padrão.
Então dentro deste Filter você consegue acessar o HttpSession deste usuário e verificar se este está autenticado ou não, caso não esteja você redireciona ele para uma página de sessão expirada ou algo assim.
Verifique na internet como mapear Filters e seu problema deve estar resolvido, qualquer coisa é só falar.
Flw,
Renan
Gostei da sugestão. Ai meu diretorio de jsps fica assim:
pages/usuario/
e as classes Action ficam:
WEB-INF/src/app/usuario/
O web.xml reconhecerá os dois? Tenho minhas dúvidas quanto a isso.
Não uso Struts 2. Mas me deu vontade de estuda-lo e coloca-lo no meu projeto. Gostaria de saber se muda muita coisa com relação ao 1 em termos de dificuldade de aprendizado?
Cara,
O Filter rodará nos padrões de url que ele está configurado para rodar, já fiz um sistema com processo de autenticação com Struts desta forma e não tive problemas.
Flw,
Renan