manejo de sesiones

ratxamala
29 de Junio del 2006
Mi problema es el siguiente estoy trabajando con dos tipos de usuarios el administrador y el usuario comun despues de identificarse con el login y la contraseña van a diferentes paginas:
administrador->bienvenidoadmin.jsp
usuario->bienvenidouser.jsp
dentro de bienvenidoadmin.jsp existe un link a modificar.jsp privilegio que solo tiene el que se loguea como administrador; pero tengo un problema si me logueo como usuario y copio la url de modificar.jsp quedo como administrador; si abro el iexplorer y meto la url de modificar.jsp ovbiamente me redirecciona a la pagina de acceso negado. pero en el primer caso existe un error de seguridad; el codigo que coloco a continuacion es para un .class que funciona perfectamente y es para autorizar al usuario y me redirecciona segun el tipo de usuario por medio del dispacher. La segunda parte de codigo son las primeras lineas de modificar.jsp el cual es el que valida las sesiones para mi esta correcto pero no se porque no valida si es usuario o admin correctamente, cosa que necesito para poder solucionar el problema comentado... espero pronta ayuda... gracias...
__________________________________________________
PRIMERA PARTE: AutorizarUsuarioTrionix.java
__________________________________________________
package trionix;

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

public class AutorizarUsuarioTrionix extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {

//Definición de variables necesarias
String login = request.getParameter("log");
String password = request.getParameter("pass");
request.setAttribute("URI", request.getRequestURI()); // Salva la URI en caso de necesitarse posteriormente

//Página redirigida si el password y/o login es incorrecto
RequestDispatcher dispatcher1 = getServletContext().getRequestDispatcher("/trionix/error.jsp?message=INGRESO_INVALIDO");

//Página redirigida si el usuario es administrador
RequestDispatcher dispatcher2 = getServletContext().getRequestDispatcher("/trionix/Bienvenido.jsp");

//Página redirigida si el usuario es usuario
RequestDispatcher dispatcher3 = getServletContext().getRequestDispatcher("/trionix/Bienvenidouser.jsp");

response.setContentType("text/html");
PrintWriter out = response.getWriter();

UsuarioTrionix user = new UsuarioTrionix();
//Integer coduser = new Integer(user.validarUsuario(login, password));
String coduser = user.validarUsuario(login, password);

if (!coduser.equals("")) {

String rol = user.getTipousuario();

String log = user.getLogin();


if (rol.equals("usuar"))
{

HttpSession sesion = request.getSession(true);
sesion.setAttribute("Codusuario", coduser);
sesion.setAttribute("Rol", rol);
sesion.setAttribute("Log",log);

dispatcher3.forward(request,response);

}
else
{
HttpSession sesion = request.getSession(true);
sesion.setAttribute("Codusuario", coduser);
sesion.setAttribute("Rol", rol);
sesion.setAttribute("Log",log);

dispatcher2.forward(request,response);
}

}//end if
else {
dispatcher1.forward(request,response);
}//end else


}// end doPost()


public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException,ServletException
{

doPost(request, response);
}

}//end servlet
__________________________________________________
SEGUNDA PARTE: Modificar.jsp
__________________________________________________
<%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*" errorPage="" %>
<% HttpSession sesion = request.getSession(true);//asi le coloque true or false me da el mismo resultado
Object lo= session.getAttribute("Log");
Object ti= session.getAttribute("Rol");
//funciona bien
if (lo==null){
response.sendRedirect("nologin.jsp?message=VIOLACION DE ACCESO");
}
//aqui empieza el problema parece que nunca pasara por aca
if (ti=="usuar"){
response.sendRedirect("noadmin.jsp?message=VIOLACION DE ACCESO");
}
%>

<%=session.getAttribute("Log")%>
<%=session.getAttribute("Rol")%>


aloneibar
29 de Junio del 2006
En Modificar jsp. Estás en java, por lo que debería poner if (lo.equals(null)) y if (ti.equals("usuar")). ¿De todas formas qué valores te visualiza en Log y Rol yendo directamente a esta página?

ratxamala
29 de Junio del 2006
excellente respuesta, cambie los if de forma en que me dijo y todo funciona pero persiste el problema de fondo...
si entro como usuario llego a bienvenidouser.jsp, pego la url de modificar.jsp 'http://localhost:8080/practicas/trionix/Modificar.jsp' y me redirecciona correctamente a acceso no valido.
Ahora entro como administrador llego a la pagina bienvenidoadmin.jsp en ella hay un link a modificar.jsp
y me deja pasar a esta pagina, 'copio la url' dentro de modificar.jsp tengo un link a cerrar sesion el cual me llama a la pagina cerrar.jsp la cual el unico contenido que tiene en el body es el siguiente:

<%session.invalidate();
response.sendRedirect("index.jsp");
%>

y me redirecciona a el index, entonces me logueo como usuario comun llego a bienvenidouser.jsp y pego la url en la barra de direcciones y quedo como administrador. Ese es el problema de seguridad que tengo, lo mismo pasa si estoy logueado como administrador llego a modificar.jsp copio la url y le doy atras-atras hasta llegar al index ne logueo como usuario pego la url y otra vez quedo con opciones de administrador...

espero pronta ayuda...

Drocher
29 de Junio del 2006
Prueba a insertar el siguiente código en el inicio de todos tus jsps:

<%
//Evita el "Caching" en el servidor Proxy
response.setHeader("Cache-Control","no-store"); //HTTP 1.0
response.setHeader("Pragma","no-cache"); //HTTP 1.1
response.setDateHeader("Expires",0);
%>

Ya que puede ser que el error se deba a la cache.

Espero te sea útil, un saludo

Denis