JSP (Java Server Page) - Problema con sesion de usuarios en jsp

 
Vista:
sin imagen de perfil

Problema con sesion de usuarios en jsp

Publicado por Pedro (1 intervención) el 08/04/2022 08:15:20
Estimados, muy buenas, tengo el siguiente problema, tengo una página JSP que va a buscar datos a una BD MySQL. Hice un Sevlet validador de sesion, una para un usuario de solo consulta (nivel 2) y otro para un usuario administrador (nivel 1) que puede editar y borrar datos y crear nuevos registros de datos. El desarrollo lo hice con Netbeans 12.5. Puse todas las páginas JSP del Administrador (Admin, Editar, Eliminar y Crear) bajo la carpeta WEB-INF, y cree un servlet para apuntar a estas 4 páginas JSP de Administración. La página para solo consultas la dejé bajo la raíz del proyecto (Proyecto/Web Pages/consultas.jsp), en donde además está la página login.jsp que es el ingreso a la página (Proyecto/Web Pages/login.jsp). Pero me pasa el siguiente problema, cuando ingreso con el usuario de solo consulta y le pongo en la barra de direcciones del navegador (cualquiera) la ruta del servlet que apunta a la página de Administración, se carga la página de Administración, a pesar de estar conectado como usuario "consulta".
O sea, por ejemplo estoy conectado en "http://xxxx.yyyy.xx:8080/datasources/datasources-usr.jsp" y estando conectado como "consulta", en el navegador pongo "http://xxxx.yyyy.xx:8080/datasources/datasourceadm", me conecta a la página de administración, lo cual no debería suceder.
No entiendo donde puede estar el problema, si alguien tuviera la amabilidad de orientarme como se puede evitar este salto de seguridad se lo agredecería muchísimo.

login.jsp:
======
<%@page session="true" %>
<%@page import="modelado.Operaciones"%>
<%@page import="java.sql.*"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<link href="css/estilos.css" rel="stylesheet" type="text/css"/>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
<link href="css/estilo.css" rel="stylesheet" type="text/css"/>
<title>JSP Page</title>
</head>
<body>
<div class="container well" id="containerLogin">
<hr>
<h2 class="center-block">Listado DS</h2>
<h3 class="center-block">XXXXXXX</h3>
</hr>
<form action="login.jsp" method="POST">
Usuario: <br>
<input type="text" name="txtUsuario"><br>
Contraseña: <br>
<input type="password" name="txtContra"><br>
<br>
<input class=btn-block type="submit" name="btnIngresar" value="Ingresar"><br>
</form>
</div>
<!-- <div class="container well" id="containerLogin"> -->
<div class="container well">

<%
Operaciones op = new Operaciones();

if(request.getParameter("btnIngresar")!=null){
String nombre=request.getParameter("txtUsuario");
String contra=request.getParameter("txtContra");
HttpSession sesion = request.getSession();
switch(op.loguear(nombre, contra)){
case 1:
sesion.setAttribute("user", nombre);
sesion.setAttribute("nivel", "1");
response.sendRedirect("datasourceadm"); ==> Servlet que apunta a la página WEB-INF/datasources-adm.jsp

break;

case 2:
sesion.setAttribute("user", nombre);
sesion.setAttribute("nivel", "2");
response.sendRedirect("datasources-usr.jsp");

break;

default:
out.print("usuario o contraseña no existe");
break;
}
}

if(request.getParameter("cerrar")!=null){

session.invalidate();
}

%>
</div>
</body>
</html>

===============
El servlet validador:
===============
package modelado;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Operaciones {

String driver;
String url;
String uss;
String contra;

public Operaciones() {
driver="com.mysql.jdbc.Driver";
url="jdbc:mysql://xxxxxxxx.yyyyyyyyyy.xx:3306/database";
uss="xxxxxxx";
contra="yyyyyy";
}

public int loguear(String us, String pass) throws SQLException{

Connection conn;
PreparedStatement pst;
ResultSet rs;
int nivel=0;
String sql="select nivel from login where usuario='" + us + "' and contra='" + pass + "'";
try {
Class.forName(this.driver);
conn = (Connection) DriverManager.getConnection(
this.url,
this.uss,
this.contra
);
pst = (PreparedStatement) conn.prepareStatement(sql);
rs = pst.executeQuery();

while (rs.next()){
nivel = rs.getInt(1);

}
conn.close();

} catch (ClassNotFoundException | SQLException e){

}

return nivel;
}

}

==========
ServletAdmin:
==========
package modelado;

import java.io.IOException;
import java.io.PrintWriter;
import static java.lang.System.out;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class datasourceadm extends HttpServlet {

/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
request.getRequestDispatcher("WEB-INF/datasources-adm.jsp").forward(request, response);
} finally {
out.close();
}
}

========
Admin JSP:
========
<%@page session="true"%>
<%@page import="java.sql.*"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
<link href="css/body.css" rel="stylesheet" type="text/css"/>
<title>JSP Page</title>
<style type="text/css">
body {background-color: lightgray}
h1 {color: black}
h3 {color: black}
p {background-color: rgb(250,0,255)}
</style>
</head>
<body id="body">

<%
HttpSession sesion = request.getSession();
String usuario;
String nivel;

if(sesion.getAttribute("user")!=null && sesion.getAttribute("nivel")!=null)
{
usuario=sesion.getAttribute("user").toString();
nivel=sesion.getAttribute("nivel").toString();
out.print("<a href='login.jsp?cerrar=true' href='ServletEditar?cerrar=true' href='ServletAgregar?cerrar=true' href='ServletDelete?cerrar=true'><h4><strong>Cerrar Session "+ usuario +"</strong></h4></a> ");

}else {

out.print("<script>location.replace('login.jsp');</script>");
}
%>

<%
//CONECTANOD A LA BASE DE DATOS:
Connection con;
String url = "jdbc:mysql://xxxxxxxxx.yyyyyyyyyyyyy.xx:3306/database";
String Driver = "com.mysql.jdbc.Driver";
String user = "xxxxxxx";
String clave = "yyyyyyyyyyy";
Class.forName(Driver);
con = DriverManager.getConnection(url, user, clave);
PreparedStatement ps;
//Emnpezamos Listando los Datos de la Tabla datasources
Statement smt;
ResultSet rs;
smt = con.createStatement();
rs = smt.executeQuery("select * from datasources");
//Creamos la Tabla:
%>

<div class="container">
<h1>Lista de DS</h1>
<h3>XXXXXXXXXXXXXXXXXXXXX</h3>
<br>
<hr>
<div class="container buscar">
<a class="btn btn-success btn-lg" href="ServletAgregar">Agregar Nuevo JDBC</a>
<br>
<br>
<form class="form" action="datasourceadm" method="POST">
<input class="form-group" type="text" name="txtbuscar">
<br>
<input class="btn btn btn-primary" type="submit" value="Buscar">
<a class="btn btn-primary" href="datasourceadm">Refrescar</a>
<br>
<br>
<i><strong>ATENCIÓN: Antes de cada búsqueda debe presionar botón "Refrescar"</strong></i>
</form>

<%

String nombuscar=request.getParameter("txtbuscar");
if(nombuscar!=null) {
smt = con.createStatement();
// <!-- rs=smt.executeQuery("select * from usuario where Nombres LIKE"+"'%"+nombuscar+"%'"); -->
rs=smt.executeQuery("select * from datasources where Platform LIKE"+"'%"+nombuscar+"%' OR Environment LIKE"+"'%"+nombuscar+"%' OR Domain LIKE"+"'%"+nombuscar+"%' OR Server LIKE"+"'%"+nombuscar+"%' OR Name LIKE"+"'%"+nombuscar+"%' OR JNDI LIKE"+"'%"+nombuscar+"%' OR URL LIKE"+"'%"+nombuscar+"%' OR User LIKE"+"'%"+nombuscar+"%'");

}else {
System.err.print("Error");
}

%>

</div>
<br>
<br>
<table class="table table-bordered">
<tr>
<th class="text-center">ID</th>
<th class="text-center">ACCIÓN</th>
<th>PLATFORM</th>
<th>ENVIRONMENT</th>
<th>DOMAIN</th>
<th>SERVER</th>
<th>NAME</th>
<th>JNDI</th>
<th>URL</th>
<th>USER</th>
</tr>
<%
while(rs.next()) {
%>
<tr>
<td class="text-center"><%= rs.getInt("id")%></td>
<td class="text-center">
<!-- <input type="hidden" value="<//%= rs.getInt("Id_Usuario")%>" id="Editar"/>
<input type="submit" class="btn btn-warning" data-toggle="modal" data-target="#myModal1" value="Editar"/> -->
<a href="ServletEditar?id=<%= rs.getInt("id")%>" class="btn btn-warning btn-sm">Editar</a>
<a href="ServletDelete?id=<%= rs.getInt("id")%>" class="btn btn-danger btn-sm">Delete</a>
</td>
<td><%= rs.getString("Platform")%></td>
<td><%= rs.getString("Environment")%></td>
<td><%= rs.getString("Domain")%></td>
<td><%= rs.getString("Server")%></td>
<td><%= rs.getString("Name")%></td>
<td><%= rs.getString("JNDI")%></td>
<td><%= rs.getString("URL")%></td>
<td><%= rs.getString("User")%></td>
</tr>
<%}%>
</table>

</div>

<div class="container">
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document" style="z-index: 9999; width: 450px">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="myModalLabel">Modificar Registro</h4>
</div>
<div class="modal-body">
<form action="" method="post">

<label>Platform:</label>
<input type="text" name="txtPlt" class="form-control"/><br>
<label>Environment:</label>
<input type="text" name="txtEnv" class="form-control"/><br>
<label>Domain:</label>
<input type="text" name="txtDom" class="form-control"/>
<label>Server:</label>
<input type="text" name="txtSrv" class="form-control"/><br>
<label>Name:</label>
<input type="text" name="txtNam" class="form-control"/>
<label>JNDI:</label>
<input type="text" name="txtJNI" class="form-control"/>
<label>URL:</label>
<input type="text" name="txtURL" class="form-control"/><br>
<label>User:</label>
<input type="text" name="txtUsr" class="form-control"/>

<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
<input type="submit" value="Guardar" class="btn btn-primary"/>
</div>
</form>
</div>
</div>
</div>
</div>
<%
String Plt, Env, Dom, Srv, Nam, JND, URL, Usr;
Plt = request.getParameter("txtPlt");
Env = request.getParameter("txtEnv");
Dom = request.getParameter("txtDom");
Srv = request.getParameter("txtSrv");
Nam = request.getParameter("txtNam");
JND = request.getParameter("txtJNI");
URL = request.getParameter("txtURL");
Usr = request.getParameter("txtUsr");
if (Plt != null && Env != null && Dom != null && Srv != null && Nam != null && JND != null && URL != null && Usr != null) {
ps = con.prepareStatement("insert into datasources(Platform, Environment, Domain, Server, Name, JNDI, URL, User)values('" + Plt + "', '" + Env + "','" + Dom + "', ,'" + Srv + "', ,'" + Nam + "', ,'" + JND + "', ,'" + URL + "', '" + Usr + "')");
ps.executeUpdate();
response.sendRedirect("datasourceadm");

}
%>
</div>
<script src="js/jquery.js" type="text/javascript"></script>
<script src="js/bootstrap.min.js" type="text/javascript"></script>

</body>
</html>

====================
Usuario solo consulta JSP:
====================
<%@page session="true"%>
<%@page import="java.sql.*"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
<link href="css/body.css" rel="stylesheet" type="text/css"/>
<title>JSP Page</title>
<style type="text/css">
body {background-color: lightgray}
h1 {color: black}
h3 {color: black}
p {background-color: rgb(250,0,255)}
</style>
</head>
<div class="modal-dialog" role="document" style="z-index: 9999; width: 450px; left: 450px; right: 450px">
<style type="text/css"> h4 { border-bottom: lemonchiffon }</style>
</div>
<body id="body">

<%
HttpSession sesion = request.getSession();
String usuario;
String nivel;

if(sesion.getAttribute("user")!=null && sesion.getAttribute("nivel")!=null)
{
usuario=sesion.getAttribute("user").toString();
nivel=sesion.getAttribute("nivel").toString();
out.print("<a href='login.jsp?cerrar=true'><h4><strong>Cerrar Sesion "+ usuario +" </strong></h4></a> ");

}else{

out.print("<script>location.replace('login.jsp');</script>");

}

%>

<%
//CONECTANOD A LA BASE DE DATOS:
Connection con;
String url = "jdbc:mysql://xxxxxxxxxxx.yyyyyyyyy.xx:3306/database";
String Driver = "com.mysql.jdbc.Driver";
String user = ""xxxxxxxxxx";
String clave = "yyyyyyyyyyyy";
Class.forName(Driver);
con = DriverManager.getConnection(url, user, clave);
PreparedStatement ps;
//Emnpezamos Listando los Datos de la Tabla DS
Statement smt;
ResultSet rs;
smt = con.createStatement();
rs = smt.executeQuery("select * from datasources");
//Creamos la Tabla:
%>

<div class="container">
<h1>Lista de DS</h1>
<h3>XXXXXXXXXXXXXXXXXXXX</h3>
<hr>
<div class="container buscar">
<!-- <a class="btn btn-success btn-lg" href="Agregar.jsp">Nuevo Registro</a> -->
<br>
<form class="form" action="datasourceusr" method="POST">
<input class="form-group" type="text" name="txtbuscar">
<br>
<input class="btn btn btn-primary" type="submit" value="Buscar">
<a class="btn btn-primary" href="datasourceusr">Refrescar</a>
<br>
<br>
<i><strong>ATENCIÓN: Antes de cada búsqueda debe presionar botón "Refrescar"</strong></i>
</form>

<%

String nombuscar=request.getParameter("txtbuscar");
if(nombuscar!=null) {
smt = con.createStatement();
rs=smt.executeQuery("select * from datasources where Platform LIKE"+"'%"+nombuscar+"%' OR Environment LIKE"+"'%"+nombuscar+"%' OR Domain LIKE"+"'%"+nombuscar+"%' OR Server LIKE"+"'%"+nombuscar+"%' OR Name LIKE"+"'%"+nombuscar+"%' OR JNDI LIKE"+"'%"+nombuscar+"%' OR URL LIKE"+"'%"+nombuscar+"%' OR User LIKE"+"'%"+nombuscar+"%'");

}else {
System.err.print("Error");
}

%>


</div>
<br>
<br>
<table class="table table-bordered">
<tr>
<th class="text-center">ID</th>
<th>PLATFORM</th>
<th>ENVIRONMENT</th>
<th>DOMAIN</th>
<th>SERVER</th>
<th>NAME</th>
<th>JNDI</th>
<th>URL</th>
<th>USER</th>
</tr>
<%
while(rs.next()) {
%>
<tr>
<td class="text-center"><%= rs.getInt("Id")%></td>
<td><%= rs.getString("Platform")%></td>
<td><%= rs.getString("Environment")%></td>
<td><%= rs.getString("Domain")%></td>
<td><%= rs.getString("Server")%></td>
<td><%= rs.getString("Name")%></td>
<td><%= rs.getString("JNDI")%></td>
<td><%= rs.getString("URL")%></td>
<td><%= rs.getString("User")%></td>
</tr>
<%}%>
</table>

</div>


</body>
</html>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder