Como adicionar segurança em páginas JSP

17 respostas
D

Não adianta colocar um login no sistema, se a próxima página pode ser muito
bem visualizada digitando seu endereço no navegador.

E isso que estou tentando aprender.

Como proteger as páginas?

Obrigado.

17 Respostas

O

Sessão, Cookies etc.
Tem vários topicos sobre sessao e cookies aqui, de uma pesquisada

A

Se quiser algo mais robusto - e difícil de configurar :frowning: - Acegi

F

No web.xml tem como vc inserir definições de segurança.
se não me engano, pesquise sobre essa tag e outras relacionadas.

D

O que estou querendo é tipo o include do php. É tão simples. Se o usuário já fez login, então
a página que possui o include será aberta, pois a sessão já se iniciou.

Na verdade, um include iria redirecionar a página do mesmo modo que um jsp:forward daí o que
eu estava querendo era um controle de sessão mesmo.

D

Não consegui encontrar em lugar nenhum.

Vai a sequência de páginas para a parte de login do sistema:

a página login é para se logar no sistema, onde a página verificar login verificará se foi digitado corretamente. Se não foi, então redireciona para a página de login novamente. Se foi, então acessa a página administracao.

Certo. Até aí eu consegui!

Mas o problema é que se eu digitar diretamente no browser:

http://localhost:8080/administracao.jsp

vai aparecer a página de administracao desprotegida, sendo que eu nem fiz login nem nada.

É isso que estou tentando explicar. Preciso controlar a sessão. Acessar a página protegida apenas se o usuário digitar o login corretamente.

Como faço isso? Cookies ou sessão? ou o quê?

Obrigado.

J

use um filtro

por ex:

package controller.filters;

import java.io.*;
import javax.servlet.http.*;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import model.beans.UsuarioVO;

/**
 *
 * @author joaosavio
 */
public class MainFilter implements Filter {

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpSession session = ((HttpServletRequest)request).getSession();
        UsuarioVO usuarioVO = new UsuarioVO();
        usuarioVO = (UsuarioVO)session.getAttribute("usuarioVO");
        
        if(usuarioVO == null) {  
            RequestDispatcher rd = request.getRequestDispatcher("/faces/view/index.jsp");    
            rd.forward(request, response);       
        }
        else if (usuarioVO.getStatus() == 1) { 
            chain.doFilter(request, response);  //OK           
        }
        else {
            RequestDispatcher rd = request.getRequestDispatcher("/faces/view/index.jsp");    
            rd.forward(request, response);                        
        }
    }

    public void init(FilterConfig arg0) throws ServletException {
        
    }

    public void destroy() {
        
    }

}
J

quer a coisa mais simples? faz um if, se a sessao com o nome q vc quiser existir, se o usuario nela existir, mostra a pagina, senao redireciona pra outra.

if{

}else{ redireciona }
D

Desculpe mas não sei utilizar filtros.

Quando fui utilizar seu código, o último import não foi encontrado.

import model.beans.UsuarioVO;

Daí eu não poderia utilizar no momento, se não sei lhe dar com isso.
Mas obrigado pela dica.

E jpcasati, pode me ajudar com um exemplo de um if?

Por exemplo: eu poderia testar este if na página que verificaria o login, não é?
Mas aí eu teria que utilizar cookies? Um exemplo do que você disse seria bom, pois entendi
o que quis dizer mas não sei o que devo fazer. É meu primeiro sistema web e quero que ele tenha segurança também.

Obrigado.

D

jpcasati:
quer a coisa mais simples? faz um if, se a sessao com o nome q vc quiser existir, se o usuario nela existir, mostra a pagina, senao redireciona pra outra.

if{

}else{ redireciona }

Fiz um if mas esta me atrapalhando encerrar a sessão, por isso retirei.
Veja:

<% if (session != null) { %> <jsp:forward page="paginaProtegida.jsp" /> <% } %>

Mas a página continua desprotegida.

R

vc usar javabeans em cada pagina fazendo uma consulta ao banco a cada pagina a ser aberta
por exemplo

<jsp:use beans id="consulta" class="banco.consultar" />

<%
String Nome = (String ) session.getAttribute(nome);
 String Senha =(String) session.getAttribute(senha);
// atributos colocados na sessao apos o login... por uma servlet qualquer

boolean existe = consulta.validaUsuario(Nome,Senha); //metodo feito em uma classe java 

if (! existe )
response.sendRedirect("login.jsp")
else {

%>



/// todo o codigo html aqui...
</html>
// e por fim
<%

  }//fecha o else

%>

bom espero ter ajudado...

D

Vou verificar depois.

Mas me diga uma coisa: eu uso o NetBeans e o que preciso fazer para utilizar este código que você postou?

obrigado.

[]s.

D

Deu certo!

Eu criei um teste de sessão:

if(sLogin== null) { response.sendRedirect("login.jsp"); }

Daí agora toda vez que minha sessão retorna nula (se eu for direto
para a página protegida), vai redirecionar para o login.

Obrigado.

V

Aí galera, estou precisando de fazer um sistema de login no qual um administrador tenha acesso para cadastrar os ususarios, sendo que todos fazem login
na mesma pag, ´ou seja, qd o administrador loga ele tem acesso a uma pag e os usuarios a outra, alguem sabe como fazer isto???

Obrigado,
Abç

D

Bom, existe várias maneiras de se fazer isso.

A primeira é a popular, onde possui um painel pra logar somente admins e outro painel (form) pra logar apenas usuários.

Cada um vai criar sessões diferentes e isso resolve!

A segunda: utiliza realm ! Com o realm você não precisa ficar criando estes testes em cada página, basta deixar um diretório, por exemplo, admin com as páginas do admin e outro como users para os usuários e setar permiss~eos no context.xml. Não é bem melhor?

Bom, mas esta é mais complicada, no momento não posso ajudar, pois estou muito enrolado com trabalhos de última hora e meu sócio tá exigindo que eu não faça outra coisa.

Qual prefere?

[]s

V

Valew galera, consegui com Realm. Obrigado a todos

K
rodrigovidalxc:
vc usar javabeans em cada pagina fazendo uma consulta ao banco a cada pagina a ser aberta por exemplo
<jsp:use beans id="consulta" class="banco.consultar" />

<%
String Nome = (String ) session.getAttribute(nome);
 String Senha =(String) session.getAttribute(senha);
// atributos colocados na sessao apos o login... por uma servlet qualquer

boolean existe = consulta.validaUsuario(Nome,Senha); //metodo feito em uma classe java 

if (! existe )
response.sendRedirect("login.jsp")
else {

%>



/// todo o codigo html aqui...
</html>
// e por fim
<%

  }//fecha o else

%>

bom espero ter ajudado...

Olá Rodrigo, bom dia.
Estou com a mesma dificuldade do colega, e achei interessante a soluçao que vc deu. Mas estou com dúvidas na linha que vc coloca . Eu tenho q criar essa classe banco.consular? tem como detalhar melhor essa tua explicação?

Agradeço a ajuda!!

K

dark123:
Deu certo!

Eu criei um teste de sessão:

if(sLogin== null) { response.sendRedirect("login.jsp"); }

Daí agora toda vez que minha sessão retorna nula (se eu for direto
para a página protegida), vai redirecionar para o login.

Obrigado.

Amigo, estou com a mesma dúvida e ví que vc achou uma solução. Só que eu fiquei com as seguintes dúvidas:
eu devo inserir esse código em todas as minhas .jsp que vem depois da login?
quem é sLogin? posso substituí-lo por session?

Agradeço.

Criado 7 de setembro de 2008
Ultima resposta 22 de jul. de 2009
Respostas 17
Participantes 9