Pagina protegida com JSP

7 respostas
Brunoleorj

Ola galera sou novo aqui e gostaria de saber se alguem pode me ajdar.

Estou num projeto da minha faculdade e desenvolvi uma intranet para uma empresa tomando como base o modelo MVC, porem nao estou sabendo como criar paginas protegidas em JSP.

Ex: eu consegui criar uma pagina de login onde o usuario digita a senha e é redirecionado sua pagina inicial. existem 3 paginas iniciais, uma é a do administrador, outra do supervisor e a outra do atendente, a minha pagina de login esta redirecionando corretamente cada funcionario para a sua respectiva pagina atraves de um servlet, que busca n BD a tabela a que esse usuario pertence.

Porem a minha duvida é a seguinte: as paginas que ficam depois da tela de login nao estao protegidas pois qualquer usuario que digite a url completa no browser sem se logar, consegue acessar as paginas que deveriam ser restritas. como resolver este problema? como proteger minhas paginas jsp observando que eu tenho 3 tipos de usuarios nno sistema com privilegios a diferentes paginas e cada um so deve conseguir acessar as suas respectivas paginas

7 Respostas

Pedrosa

Vc pode usar um filtro ou sessão, eu uso sessão, vamos supor que vc logue na tabela de usuário coloco o tipo de usuario se for adm vai p/ home de adm e se for usuario home de usuario e para contralar isso segue um exemplo de sessão:

//jogo esse include nas páginas jsp de usuario comum

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@page isELIgnored="false"%>
<c:if test="${empty codigoUsuario}">
	<script>
		alert("Para acessar o sistema é preciso está logado");
		location.href='Index.jsp';
	</script>
</c:if>

//Logando

if(bolao.validaLogin(formulario)){
    if(formulario.getTipo()==1){//perfil usuario
        sessao.setAttribute("codigoUsuario",bolao.getCodigoUsuario(request.getParameter("usuario")));
        request.setAttribute("jogos",bolao.getJogos(grupo));
        target = "/Jogos.jsp";
    }else{//perfil adm
        sessao.setAttribute("adm",formulario.getTipo());
        target = "/HomeAdm.jsp";
    }	
}else{
    target = "/Index.jsp";
    msg = "Usuário Inválido!";
    request.setAttribute("msg",msg);
}

Para módulo adm use esse include:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@page isELIgnored="false"%>
<c:if test="${empty adm}">
	<script>
		alert("Para acessar o sistema é preciso está logado");
		location.href='Index.jsp';
	</script>
</c:if>
C

Esse método não é muito apropriado, pois você copia e cola o trecho de autenticação (ou o include) em todas as páginas do sistema. Em sistemas grandes, se for necessária alguma mudança vc tá frito.

Para proteger JSPs, coloque-as dentro do diretório /WEB-INF (aí só os forwards dos servlets vão conseguir acessá-los) ou use filtros para *.jsp. Muito mais elegante! :slight_smile:

R

mas a página.jsp fica no WEB-INF ?
ai eu tenho que fazer um Servlet pra acessa-la?

cara,
você teria algum exemplo?

Obrigado

F

renatodervelan:
mas a página.jsp fica no WEB-INF ?
ai eu tenho que fazer um Servlet pra acessa-la?

cara,
você teria algum exemplo?

Obrigado

Os jsp’s ficam fora da WEB-INF.
O que fica dentro desta pasta são as tag-libs,
os jars que utiliza no projeto
e as classes que vc desenvolve. Além dos arquivos de informações
como o web.xml e outros xmls, …

Flow

C

As páginas publicas, que não dependem de permissões para serem acessadas, poderiam ficar fora do WEB-INF mesmo. Páginas como index.jsp, login.jsp, etc.

Agora já páginas que dependam de autenticação/autorização, podem ficar dentro de WEB-INF, aí os seus servlets/actions cuidariam da permissão.

Sacou?

Pedrosa

Como vc falou para acessar as paginas protegidas dentro de WEB-INF pelo servlet, mas se usuário copiar o endereço ex:

meuSite/servlet?acao=xx

Não vai acessar o JSP do mesmo jeito?, jogar somente dentro de WEB-INF não vai resolver o problema ou estou enganado?

zirocool

Pedrosa:
Como vc falou para acessar as paginas protegidas dentro de WEB-INF pelo servlet, mas se usuário copiar o endereço ex:

meuSite/servlet?acao=xx

Não vai acessar o JSP do mesmo jeito?, jogar somente dentro de WEB-INF não vai resolver o problema ou estou enganado?

Resolve o problema sim pedrosa.

Se os sistema for bem implementado, antes da servlet ler a ação, o cara vai checar se ele tá registrado ou não no sistema, com sessão, ou sei lá o que. Se não tiver logado, empurra ele pruma página de login e deu… :lol:
Simplinho simplinho! :smiley:

Criado 3 de julho de 2006
Ultima resposta 7 de jul. de 2006
Respostas 7
Participantes 6