Commit c46daa5a by Alonso Moreno

[ADD] Creado login, integracion con seguridad

parent 438cc85f
...@@ -12,4 +12,6 @@ public interface PersonaDAO { ...@@ -12,4 +12,6 @@ public interface PersonaDAO {
public JSONObject cambiarEstado(JSONObject datos); public JSONObject cambiarEstado(JSONObject datos);
public JSONObject reportePersona(JSONObject datos);
} }
...@@ -49,4 +49,14 @@ public class PersonaService { ...@@ -49,4 +49,14 @@ public class PersonaService {
return respuesta; return respuesta;
} }
public JSONObject reportePersona(JSONObject datos) {
JSONObject respuesta = null;
try {
respuesta = dao.reportePersona(datos);
} catch (Exception e) {
System.out.println("Error PersonaService >> reportePersona >> " + e.getMessage());
}
return respuesta;
}
} }
package demojsoncrud.servlets;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebFilter("/*")
public class RequestFilter implements Filter, ServletContextListener {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
System.out.println("Filter");
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
System.out.println("req URI ==> " + request.getRequestURI());
System.out.println("req Path ==> " + request.getContextPath());
String login = request.getContextPath() + "/vistas/index.jsp";
String assets = request.getContextPath() + "/plantilla/assets";
String css = request.getContextPath() + "/plantilla/css";
String js = request.getContextPath() + "/plantilla/js";
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
@Override
public void contextInitialized(ServletContextEvent sce) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
...@@ -219,12 +219,12 @@ public class PersonaSqlserverDAO implements PersonaDAO { ...@@ -219,12 +219,12 @@ public class PersonaSqlserverDAO implements PersonaDAO {
System.err.println("Error al registrar -> " + e.getMessage() + "[" + e.getErrorCode() + "]"); System.err.println("Error al registrar -> " + e.getMessage() + "[" + e.getErrorCode() + "]");
} finally { } finally {
try { try {
if (connection != null) {
connection.close();
}
if (psEditarPersona != null) { if (psEditarPersona != null) {
psEditarPersona.close(); psEditarPersona.close();
} }
if (connection != null) {
connection.close();
}
} catch (SQLException e) { } catch (SQLException e) {
System.err.println("Error: ha ocurrido un error al intentar cerrar las conexiones y/o liberacion de recursos -> " + e.getMessage()); System.err.println("Error: ha ocurrido un error al intentar cerrar las conexiones y/o liberacion de recursos -> " + e.getMessage());
} }
...@@ -286,4 +286,9 @@ public class PersonaSqlserverDAO implements PersonaDAO { ...@@ -286,4 +286,9 @@ public class PersonaSqlserverDAO implements PersonaDAO {
return jsonReturn; return jsonReturn;
} }
@Override
public JSONObject reportePersona(JSONObject datos) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
} }
const Cookies = {
set: (key, value, expiration) => {
key = [encodeURIComponent(key) + "=" + encodeURIComponent(value)]
expiration && ("expiry" in expiration && ("number" === typeof expiration.expiry && (expiration.expiry = new Date(1E3 * expiration.expiry + +new Date)),
key.push("expires=" + expiration.expiry.toGMTString())),
"domain" in expiration && key.push("domain=" + expiration.domain),
"path" in expiration && key.push("path=" + expiration.path),
"secure" in expiration && expiration.secure && key.push("secure"))
document.cookie = key.join("; ")
},
get: (key, bool) => {
const arr = []
for (let cookies = document.cookie.split(/; */), i = 0; i < cookies.length; i++) {
var cookie = cookies[i].split("=")
cookie[0] === encodeURIComponent(key) && arr.push(decodeURIComponent(cookie[1].replace(/\+/g, "%20")))
}
return bool ? arr : arr[0]
},
clear: (key, obj) => {
// b = key
// c = obj {path: '/', domain: '.example.com'}
obj || (obj = {});
obj.expiry = -86400;
this.set(key, "", obj)
}
};
\ No newline at end of file
// reusable ajax promise
const ajaxRequest = obj => {
return new Promise((resolve, reject) => {
$.ajax({
url: obj.url,
type: obj.type,
headers: obj.headers,
data: JSON.stringify(obj.body),
beforeSend: (xhr, settings) => {
}, success: (response, textStatus, jqXHR) => {
resolve(response)
}, error: (jqXHR, textStatus, errorThrown) => {
reject({
status: textStatus,
message: `Error making request`,
request: obj
})
}
})
})
}
// http request
const httpRequest = {
login(params) {
return ajaxRequest({
url: 'http://172.16.2.53:8080/security-rest/api/user/login',
type: 'POST',
headers: {
"Content-type": 'application/json',
"Accept": 'application/json'
},
body: params
})
},
verify() {
return ajaxRequest({
url: 'http://172.16.2.53:8080/security-rest/api/user/verificarLogin',
type: 'POST',
headers: {
"Content-type": 'application/json',
"Accept": 'application/json',
// "Authorization": window.localStorage.getItem('Authorization')
"Authorization": Cookies.get('Authorization')
}
})
}
}
// domevents
const DOMEvents = {
init() {
this.signIn()
this.verify()
},
signIn() {
document.querySelector('#signIn').addEventListener('click', (e) => {
let params = {
usuario: document.querySelector('#usuario').value.trim(),
pass: document.querySelector('#pass').value,
codigoProyecto: "2",
path: `${location.origin}/${location.pathname.split('/')[1]}/`
}
httpRequest.login(params)
.then(data => {
if (data.status) {
delete data["status"]
// window.localStorage.setItem('Authorization', 'Bearer ' + data.token)
// window.localStorage.setItem('menu', JSON.stringify(data.menu))
Cookies.set('Authorization', `Bearer ${data.token}`, {expiry: 36000000})
Cookies.set('menu', `${JSON.stringify(data.menu)}`)
window.location.href = 'main.jsp'
} else {
alert('No tienes autorización')
}
console.log(data)
})
.catch(err => console.log(err))
})
},
verify() {
document.querySelector('#verify').addEventListener('click', (e) => {
httpRequest.verify()
.then(data => console.log(data))
.catch(err => console.log(err))
})
}
}
DOMEvents.init()
\ No newline at end of file
...@@ -64,7 +64,6 @@ const ajaxRequest = obj => { ...@@ -64,7 +64,6 @@ const ajaxRequest = obj => {
dataType: obj.dataType, dataType: obj.dataType,
data: obj.body, data: obj.body,
beforeSend: (xhr, settings) => { beforeSend: (xhr, settings) => {
}, success: (response, textStatus, jqXHR) => { }, success: (response, textStatus, jqXHR) => {
resolve(response) resolve(response)
}, error: (jqXHR, textStatus, errorThrown) => { }, error: (jqXHR, textStatus, errorThrown) => {
...@@ -253,6 +252,7 @@ const asignarEventos = () => { ...@@ -253,6 +252,7 @@ const asignarEventos = () => {
}) })
document.querySelectorAll('.estado').forEach((e) => { document.querySelectorAll('.estado').forEach((e) => {
console.log(e)
e.addEventListener('click', (ev) => { e.addEventListener('click', (ev) => {
console.log(getClosest(ev.target, 'tr').rowIndex - 1) console.log(getClosest(ev.target, 'tr').rowIndex - 1)
}) })
......
<%--
Document : index
Created on : 05-ene-2018, 20:49:32
Author : Alonso
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
<%@include file="templates/header.jsp" %>
<!--template-core-->
<!--css-->
<!--css-->
</head>
<body>
<%@include file="templates/header-body.jsp" %>
<!-- content -->
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-flat border-top-xlg border-top-primary">
<div class="panel-heading">
<h6 class="panel-title text-semibold"><i class="icon-location4 position-left"></i> Ubigeo</h6>
</div>
<div class="panel-body">
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label class="text-uppercase">departamento<span class="text-danger"> (*)</span></label>
<select id="select_departamento" class="form-control" data-width="100%">
<option value="0">[ SELECCIONE ]</option>
</select>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label class="text-uppercase">provincia<span class="text-danger"> (*)</span></label>
<select id="select_provincia" class="bootstrap-select" data-width="100%">
<option value="0">[ SELECCIONE ]</option>
</select>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label class="text-uppercase">distrito<span class="text-danger"> (*)</span></label>
<select id="select_distrito" class="bootstrap-select" data-width="100%">
<option value="0">[ SELECCIONE ]</option>
</select>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<label class="text-danger pull-right">Campos obligatorios (*)</label>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- / content -->
<%@include file="templates/footer-body.jsp" %>
<!--js-->
<script type="text/javascript" src="../plantilla/assets/js/plugins/forms/selects/bootstrap_select.min.js"></script>
<script type="text/javascript" src="../plantilla/assets/js/pages/form_bootstrap_select.js"></script>
<!--js-->
<script src="../js/general.js" type="text/javascript"></script>
<script src="../js/pages/consultaUbigeo.js" type="text/javascript"></script>
</body>
</html>
<%--
Document : index
Created on : 05-ene-2018, 20:49:32
Author : Alonso
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%> <%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<%@include file="templates/header.jsp" %> <meta charset="utf-8">
<!--template-core--> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>DEMO JSON CRUD</title>
<!--css--> <!-- Global stylesheets -->
<link href="https://fonts.googleapis.com/css?family=Roboto:400,300,100,500,700,900" rel="stylesheet" type="text/css">
<link href="../plantilla/assets/css/icons/icomoon/styles.css" rel="stylesheet" type="text/css">
<link href="../plantilla/assets/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="../plantilla/assets/css/core.css" rel="stylesheet" type="text/css">
<link href="../plantilla/assets/css/components.css" rel="stylesheet" type="text/css">
<link href="../plantilla/assets/css/colors.css" rel="stylesheet" type="text/css">
<!-- /global stylesheets -->
<!--css-->
</head> </head>
<body> <body class="login-container">
<%@include file="templates/header-body.jsp" %>
<!-- content --> <!-- Page container -->
<div class="row"> <div class="page-container">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-flat border-top-xlg border-top-primary"> <!-- Page content -->
<div class="panel-heading"> <div class="page-content">
<h6 class="panel-title text-semibold"><i class="icon-location4 position-left"></i> Ubigeo</h6>
</div> <!-- Main content -->
<div class="panel-body"> <div class="content-wrapper">
<div class="row">
<div class="col-md-4"> <!-- Content area -->
<div class="form-group"> <div class="content">
<label class="text-uppercase">departamento<span class="text-danger"> (*)</span></label>
<select id="select_departamento" class="form-control" data-width="100%"> <!-- Advanced login -->
<option value="0">[ SELECCIONE ]</option> <form action="#" >
</select> <div class="panel panel-body login-form">
<div class="text-center">
<div class="icon-object border-slate-300 text-slate-300"><i class="icon-reading"></i></div>
<h5 class="content-group">PROYECTO ESTÁNDAR <small class="display-block">Ingrese sus credenciales</small></h5>
</div> </div>
<div class="form-group has-feedback has-feedback-left">
<input type="text" id="usuario" class="form-control" placeholder="Usuario" value="amoreno">
<div class="form-control-feedback">
<i class="icon-user text-muted"></i>
</div> </div>
<div class="col-md-4">
<div class="form-group">
<label class="text-uppercase">provincia<span class="text-danger"> (*)</span></label>
<select id="select_provincia" class="bootstrap-select" data-width="100%">
<option value="0">[ SELECCIONE ]</option>
</select>
</div> </div>
<div class="form-group has-feedback has-feedback-left">
<input type="password" id="pass" class="form-control" placeholder="Contraseña" value="123">
<div class="form-control-feedback">
<i class="icon-lock2 text-muted"></i>
</div> </div>
<div class="col-md-4">
<div class="form-group">
<label class="text-uppercase">distrito<span class="text-danger"> (*)</span></label>
<select id="select_distrito" class="bootstrap-select" data-width="100%">
<option value="0">[ SELECCIONE ]</option>
</select>
</div> </div>
<div class="form-group login-options">
<div class="row">
<div class="col-sm-6">
<label class="checkbox-inline">
<input type="checkbox" class="styled" checked="checked">
Remember
</label>
</div> </div>
<div class="col-sm-6 text-right">
<a href="login_password_recover.html">¿Olvidaste tu contraseña?</a>
</div> </div>
<div class="row">
<div class="col-md-12">
<label class="text-danger pull-right">Campos obligatorios (*)</label>
</div> </div>
</div> </div>
<div class="form-group">
<button type="button" id="signIn" class="btn bg-blue btn-block">Ingresa <i class="icon-arrow-right14 position-right"></i></button>
</div>
<div class="form-group">
<button type="button" id="verify" class="btn bg-blue btn-block">Verificar token <i class="icon-arrow-right14 position-right"></i></button>
</div>
</div> </div>
</form>
<!-- /advanced login -->
<!-- Footer -->
<div class="footer text-muted text-center">
&copy; 2015. <a href="#">Proyecto Estándar</a> por <a href="#">Área Sistemas TIC</a>
</div> </div>
<!-- /footer -->
</div> </div>
<!-- /content area -->
</div> </div>
<!-- / content --> <!-- /main content -->
</div>
<!-- /page content -->
</div>
<!-- /page container -->
<%@include file="templates/footer-body.jsp" %> <!--javascript template-->
<!-- Core JS files -->
<script type="text/javascript" src="../plantilla/assets/js/plugins/loaders/pace.min.js"></script>
<script type="text/javascript" src="../plantilla/assets/js/core/libraries/jquery.min.js"></script>
<script type="text/javascript" src="../plantilla/assets/js/core/libraries/bootstrap.min.js"></script>
<script type="text/javascript" src="../plantilla/assets/js/plugins/loaders/blockui.min.js"></script>
<!-- /core JS files -->
<!--js--> <!-- Theme JS files -->
<script type="text/javascript" src="../plantilla/assets/js/plugins/forms/selects/bootstrap_select.min.js"></script> <script type="text/javascript" src="../plantilla/assets/js/plugins/forms/styling/uniform.min.js"></script>
<script type="text/javascript" src="../plantilla/assets/js/pages/form_bootstrap_select.js"></script> <script type="text/javascript" src="../plantilla/assets/js/core/app.js"></script>
<!--js--> <script type="text/javascript" src="../plantilla/assets/js/pages/login.js"></script>
<script src="../js/general.js" type="text/javascript"></script> <!-- /theme JS files -->
<script src="../js/pages/ubigeo.js" type="text/javascript"></script> <!--javascript template-->
<script src="../js/lib/cookies.js" type="text/javascript"></script>
<script src="../js/pages/index.js" type="text/javascript"></script>
</body> </body>
</html> </html>
<%--
Document : index
Created on : 05-ene-2018, 20:49:32
Author : Alonso
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
<%@include file="templates/header.jsp" %>
<!--template-core-->
<!--css-->
<!--css-->
</head>
<body>
<%@include file="templates/header-body.jsp" %>
<!-- content -->
<!-- / content -->
<%@include file="templates/footer-body.jsp" %>
<!--js-->
<script type="text/javascript" src="../plantilla/assets/js/plugins/forms/selects/bootstrap_select.min.js"></script>
<script type="text/javascript" src="../plantilla/assets/js/pages/form_bootstrap_select.js"></script>
<!--js-->
<script src="../js/general.js" type="text/javascript"></script>
</body>
</html>
...@@ -264,7 +264,7 @@ ...@@ -264,7 +264,7 @@
<!--mi js--> <!--mi js-->
<script src="../js/lib/validate_inputs.js" type="text/javascript"></script> <script src="../js/lib/validate_inputs.js" type="text/javascript"></script>
<script src="../js/general.js" type="text/javascript"></script> <script src="../js/general.js" type="text/javascript"></script>
<script src="../js/pages/persona.js" type="text/javascript"></script> <script src="../js/pages/mantenimientoPersona.js" type="text/javascript"></script>
<!--mi js--> <!--mi js-->
</body> </body>
......
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
<%@include file="templates/header.jsp" %>
<!--template-core-->
<!--css-->
<!--css-->
</head>
<body>
<%@include file="templates/header-body.jsp" %>
<!-- content -->
<div class="row">
<div class="col-md-6 col-md-offset-3">
<div class="panel panel-flat border-top-xlg border-top-primary">
<div class="panel-heading">
<h6 class="panel-title text-semibold"><i class="icon-cog3 position-left"></i> Mantenimiento persona</h6>
</div>
<div class="panel-body">
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label class="control-label display-block">Ingresar criterio de búsqueda: </label>
<div class="input-group input-group-xlg">
<span class="input-group-addon"><i class="icon-search4"></i></span>
<input id="txt-busqueda" type="text" class="form-control" placeholder="Ingresar criterio">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 text-center">
<button id="btn_buscar_criterio" type="button" class="btn btn-primary"><i class="icon-search4 position-left"></i> Buscar</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="panel panel-flat border-top-xlg border-top-primary">
<div class="panel-heading">
<h6 class="panel-title text-semibold"><i class=" icon-list3 position-left"></i> Listado persona</h6>
</div>
<div class="table-responsive">
<table class="table table-striped table-sm" id="tbl-persona">
<thead>
<tr>
<th>#</th>
<th>DNI</th>
<th>APELLIDOS Y NOMBRES</th>
<th>EDAD</th>
<th>CORREO ELECTRONICO</th>
<th>ESTADO</th>
<th>ACCIONES</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- / content -->
<%@include file="templates/footer-body.jsp" %>
<!--js plantilla-->
<!--jQueryValidator-->
<script type="text/javascript" src="../plantilla/assets/js/plugins/forms/validation/validate.min.js"></script>
<!--jQueryValidator-->
<!--form-->
<script type="text/javascript" src="../plantilla/assets/js/plugins/forms/inputs/touchspin.min.js"></script>
<script type="text/javascript" src="../plantilla/assets/js/pages/form_input_groups.js"></script>
<!--form-->
<!--modal-->
<script type="text/javascript" src="../plantilla/assets/js/pages/components_modals.js"></script>
<!--modal-->
<!--sweetalerts-->
<script type="text/javascript" src="../plantilla/assets/js/plugins/notifications/bootbox.min.js"></script>
<script type="text/javascript" src="../plantilla/assets/js/plugins/notifications/sweet_alert.min.js"></script>
<!--sweetalerts-->
<!--datatable-->
<script type="text/javascript" src="../plantilla/assets/js/plugins/tables/datatables/datatables.min.js"></script>
<script type="text/javascript" src="../plantilla/assets/js/plugins/forms/selects/select2.min.js"></script>
<!--datatable-->
<!--js plantilla-->
<!--mi js-->
<script src="../js/lib/validate_inputs.js" type="text/javascript"></script>
<script src="../js/general.js" type="text/javascript"></script>
<!--mi js-->
</body>
</html>
...@@ -27,4 +27,5 @@ ...@@ -27,4 +27,5 @@
<script type="text/javascript" src="../plantilla/assets/js/plugins/forms/selects/bootstrap_multiselect.js"></script> <script type="text/javascript" src="../plantilla/assets/js/plugins/forms/selects/bootstrap_multiselect.js"></script>
<script type="text/javascript" src="../plantilla/assets/js/core/app.js"></script> <script type="text/javascript" src="../plantilla/assets/js/core/app.js"></script>
<script src="../js/lib/cookies.js" type="text/javascript"></script>
<!-- /core JS files --> <!-- /core JS files -->
\ No newline at end of file
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
<!-- Global stylesheets --> <!-- Global stylesheets -->
<link href="https://fonts.googleapis.com/css?family=Roboto:400,300,100,500,700,900" rel="stylesheet" type="text/css"> <link href="https://fonts.googleapis.com/css?family=Roboto:400,300,100,500,700,900" rel="stylesheet" type="text/css">
<link href="../plantilla/assets/css/icons/icomoon/styles.css" rel="stylesheet" type="text/css"> <link href="../plantilla/assets/css/icons/icomoon/styles.css" rel="stylesheet" type="text/css">
<link href="../plantilla/assets/css/icons/fontawesome/styles.min.css" rel="stylesheet" type="text/css">
<link href="../plantilla/assets/css/bootstrap.css" rel="stylesheet" type="text/css"> <link href="../plantilla/assets/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="../plantilla/assets/css/core.css" rel="stylesheet" type="text/css"> <link href="../plantilla/assets/css/core.css" rel="stylesheet" type="text/css">
<link href="../plantilla/assets/css/components.css" rel="stylesheet" type="text/css"> <link href="../plantilla/assets/css/components.css" rel="stylesheet" type="text/css">
......
...@@ -31,15 +31,30 @@ ...@@ -31,15 +31,30 @@
<div class="sidebar-category sidebar-category-visible"> <div class="sidebar-category sidebar-category-visible">
<div class="category-content no-padding"> <div class="category-content no-padding">
<ul class="navigation navigation-main navigation-accordion"> <ul class="navigation navigation-main navigation-accordion">
<!-- Main --> <!-- Main -->
<li class="navigation-header"><span>Main</span> <i class="icon-menu" title="Main pages"></i></li> <li class="navigation-header">
<!-- <li class="active"><a href="index.html"><i class="icon-home4"></i> <span>UBIGEO</span></a></li>--> <span><i class="icon-menu" title="Main pages"></i> MEN PRINCIPAL</span>
<li><a href="../vistas/index.jsp"><i class="icon-location4"></i> <span>UBIGEO</span></a></li> </li>
<li>
<a href="#"><i class="fa fa-gears fa-lg"></i> <span>MANTENIMIENTO</span></a>
<ul>
<li><a href="../vistas/mantenimientoPersona.jsp"><span>PERSONA</span></a></li>
</ul>
</li>
<li>
<a href="#"><i class="fa fa-exclamation-triangle fa-lg"></i> <span>REPORTES</span></a>
<ul>
<li><a href="../vistas/reportePersona.jsp" id="layout1">PERSONA</a></li>
</ul>
</li>
<li class="navigation-header">
<span><i class="icon-menu" title="Main pages"></i> MEN SECUNDARIO</span>
</li>
<li> <li>
<a href="#"><i class="icon-cog3"></i> <span>Mantenimiento</span></a> <a href="#"><i class="fa fa-search fa-lg"></i> <span>CONSULTA</span></a>
<ul> <ul>
<li><a href="../vistas/persona.jsp" id="layout1">Persona</a></li> <li><a href="../vistas/consultaUbigeo.jsp"><span>UBIGEO</span></a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment