Commit f00ef75e by Percy Quispe

Agregar validaciones

parent 9a6a7e75
...@@ -2,14 +2,12 @@ package demojsoncrud.servlets; ...@@ -2,14 +2,12 @@ package demojsoncrud.servlets;
import demojsoncrud.utilities.GeneralUtils; import demojsoncrud.utilities.GeneralUtils;
import demojsoncrud.utilities.PostRequest; import demojsoncrud.utilities.PostRequest;
import demojsoncrud.utilities.VistasExtras;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.List; import java.util.List;
import javax.servlet.Filter; import javax.servlet.Filter;
import javax.servlet.FilterChain; import javax.servlet.FilterChain;
import javax.servlet.FilterConfig; import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; import javax.servlet.ServletContextListener;
import javax.servlet.ServletException; import javax.servlet.ServletException;
...@@ -25,36 +23,50 @@ import org.json.JSONObject; ...@@ -25,36 +23,50 @@ import org.json.JSONObject;
@WebFilter("/*") @WebFilter("/*")
public class RequestFilter implements Filter, ServletContextListener { public class RequestFilter implements Filter, ServletContextListener {
private final String BASE = "http://localhost:8080/proyecto-estandar/"; private final String BASE = "http://localhost:8080/proyecto-estandar/";//Modificar con la ruta de su proyecto
@Override @Override
public void init(FilterConfig filterConfig) throws ServletException { public void init(FilterConfig filterConfig) throws ServletException {
} }
/**
* <p>
* BASE = Es la ruta del proyecto que se va implementar esta es la variable que se va a modificar en primera instancia.
* urlRequested = a la ruta para la verificación del token de la API REST.
* login = a la pantalla de inicio del sistema en este caso el login.
* js = a la ruta /nombre_de_proyecto/js esto sirve para darle acceso a todos los archivos que se encuentren en la carpeta js sin necesidad de validar el token
* css = a la ruta /nombre_de_proyecto/css esto sirve para darle acceso a todos los archivos que se encuentren en la carpeta css sin necesidad de validar el token
* postRequest = new PostRequest(urlRequested); urlRequested es la ruta que se va enviar para poder enviar una peticion post al servidor
* JSONObject valid = va capturar la respuesta de la petición post al servidor una respuesta importante es su status=true: su token fue verificado correctamente, status=false: su token fue rechazado y se le enviar una excepción UNAUTHORIZED
* </p>
* @param req recibe el parametro para poder asignar su valor a HttpServletResponse response para obtener los métodos básicos de un servlet
* @param res recibe el parametro para poder asignar su valor a HttpServletRequest request para obtener los métodos básicos de un servlet
* @param chain se utiliza (chain.doFilter(request, response);) para pasar el acceso al siguiente filtro sí existieran mas filtros y sí no hay mas filtros te redirecciona a el servlet solicitado.
* @throws IOException
* @throws ServletException
*/
@Override @Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req; HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res; HttpServletResponse response = (HttpServletResponse) res;
String respuesta = ""; String respuesta = "";
String indexPath = "http://localhost:8080/proyecto-estandar/vistas/index.jsp";
String index = "vistas/index.jsp";
String urlRequested = "http://172.16.2.53:8080/security-rest/api/user/verificarLogin"; String urlRequested = "http://172.16.2.53:8080/security-rest/api/user/verificarLogin";
System.out.println("URI "+request.getRequestURI()); System.out.println("URI "+request.getRequestURI());
if (String.valueOf(request.getRequestURL()).contains(BASE)) { if (String.valueOf(request.getRequestURL()).contains(BASE)) {
String login = request.getContextPath() + "/vistas/index.jsp"; String login = request.getContextPath() + "/vistas/index.jsp";
String main = request.getContextPath() + "/vistas/main.jsp";
String plantilla = request.getContextPath() + "/plantilla"; String plantilla = request.getContextPath() + "/plantilla";
String js = request.getContextPath() + "/js"; String js = request.getContextPath() + "/js";
String css = request.getContextPath() + "/css";
System.out.println(js);
String url = String.valueOf(request.getRequestURL()); String url = String.valueOf(request.getRequestURL());
if (url.contains(login) || url.contains(plantilla) || url.contains(js)|| url.contains("index.jsp")||url.contains("main.jsp")) { if (url.equalsIgnoreCase(BASE) || url.contains(login) || url.contains(plantilla) || url.contains(js)|| url.contains(css)|| url.contains("index.jsp")||url.contains("main.jsp")) {
chain.doFilter(request, response); chain.doFilter(request, response);
} else { } else {
PostRequest postRequest = new PostRequest(urlRequested); PostRequest postRequest = new PostRequest(urlRequested);
JSONObject valid = null; JSONObject valid = null;
String auth = ""; String auth = "";
if(url.contains(".jsp")){ if(url.contains(".jsp")){/*Valida la redirección entre páginas obteniendo los cookies y capturando el token */
auth = request.getHeader("Cookie"); auth = request.getHeader("Cookie");
if(auth.contains("Bearer")){ if(auth.contains("Bearer")){
String[] parts = auth.split(";"); String[] parts = auth.split(";");
...@@ -82,15 +94,23 @@ public class RequestFilter implements Filter, ServletContextListener { ...@@ -82,15 +94,23 @@ public class RequestFilter implements Filter, ServletContextListener {
String ruta = request.getRequestURI(); String ruta = request.getRequestURI();
int indice = GeneralUtils.obtenerIndex(ruta); int indice = GeneralUtils.obtenerIndex(ruta);
String rutaJsp = ruta.substring(indice, ruta.length()); String rutaJsp = ruta.substring(indice, ruta.length());
if(url.contains(".jsp")){ if(url.contains(".jsp")){
boolean acceso = false; boolean acceso = false;
for(Object vista :vistas){ for(int i= 0;vistas.size()>i;i++){
Object vista = vistas.get(i);
/*Esta condicional solo aplica cuando sí se tiene páginas detalle propias del sistema (que no estan registrados en SEGURIDAD) mas informacion VistasExtras.java */
switch(vista.toString()){//Agrega las vistas detalle
case VistasExtras.MANTENIMIENTO_PERSONA:VistasExtras.getVistasExtrasMantenimientoPersona(vistas); break;
case VistasExtras.OTROS:VistasExtras.getVistasExtrasMantenimientoOtros(vistas);break;//Ejemplo
}
System.out.println("Vista : "+vista +" rutaJSP : "+rutaJsp); System.out.println("Vista : "+vista +" rutaJSP : "+rutaJsp);
if(vista.toString().equalsIgnoreCase(rutaJsp)){ if(vista.toString().equalsIgnoreCase(rutaJsp)){
acceso=true; acceso=true;
break; break;
} }
} }
if(!acceso){ if(!acceso){
Response.ResponseBuilder builder = null; Response.ResponseBuilder builder = null;
sendError(response); sendError(response);
......
...@@ -21,7 +21,6 @@ public class GeneralUtils { ...@@ -21,7 +21,6 @@ public class GeneralUtils {
break; break;
} }
} }
return salida; return salida;
} }
} }
...@@ -28,14 +28,22 @@ public class PostRequest { ...@@ -28,14 +28,22 @@ public class PostRequest {
data += URLEncoder.encode(propiedad, "UTF-8") + "=" + URLEncoder.encode(valor, "UTF-8"); data += URLEncoder.encode(propiedad, "UTF-8") + "=" + URLEncoder.encode(valor, "UTF-8");
} }
} }
/**
* <p>
* Este método obtiene el token, abre una conexión y la envía en el header de la solicitud http
* y obtiene la respuesta del servidor.
* </p>
* @param authorization El token que sera asignado en el web filter para su correcta validación
* @return
* @throws IOException
*/
public String getRespueta(String authorization) throws IOException { public String getRespueta(String authorization) throws IOException {
String respuesta = ""; String respuesta = "";
//abrimos la conexión //abrimos la conexión
URLConnection conn = url.openConnection(); URLConnection conn = url.openConnection();
conn.setRequestProperty("Authorization", authorization); conn.setRequestProperty("Authorization", authorization);//Agregar header
//especificamos que vamos a escribir //especificamos que vamos a escribir
conn.setDoOutput(true); conn.setDoOutput(true);
//obtenemos el flujo de escritura //obtenemos el flujo de escritura
......
...@@ -5,12 +5,40 @@ ...@@ -5,12 +5,40 @@
*/ */
package demojsoncrud.utilities; package demojsoncrud.utilities;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
public final class VistasExtras { public final class VistasExtras {
private static final String detalleMantenimientoPersona = "detalleMantenimientoPersona"; /*Mantenimiento Persona*/
public static List<String> getVistasExtras(){ public static final String MANTENIMIENTO_PERSONA = "mantenimientoPersona.jsp";
return null; private static final String DETALLE_MANTENIMIENTO_PERSONA = "detalleMantenimientoPersona.jsp";
private static final String DETALLE_MANTENIMIENTO_UBIGEO = "detalleReportePersona.jsp";
private static final String DETALLE_MANTENIMIENTO_RASTREO = "detalleMantenimientoRastreo.jsp";//Ejemplo
private static final String DETALLE_MANTENIMIENTO_SIGET = "detalleMantenimientoSiget.jsp";//Ejemplo
// Otros
public static final String OTROS = "example.jsp";//Ejemplo
private static final String DETALLE_OTROS = "detalleOtros.jsp";//Ejemplo
// End otros
/**
* <p>
* Este método se invoca cuando el sistema cuenta con vistas detalle que son omisas por el sistema de Seguridad
* ya que estas vistas detalles son propias del sistema.
* Las debemos agregar como constantes para que no se pueda modificar en tiempo de ejecución.
* </p>
* @param vistas las vistas que estas registradas en el web service de Seguridad, con el fin de añadir en la misma lista nuevas vistas permitidas
* @return
*/
public static List<Object> getVistasExtrasMantenimientoPersona(List<Object> vistas){
vistas.add(DETALLE_MANTENIMIENTO_PERSONA);
vistas.add(DETALLE_MANTENIMIENTO_UBIGEO);
vistas.add(DETALLE_MANTENIMIENTO_RASTREO);
vistas.add(DETALLE_MANTENIMIENTO_SIGET);
return vistas;
}
public static List<Object> getVistasExtrasMantenimientoOtros(List<Object> vistas){
vistas.add(DETALLE_OTROS);
return vistas;
} }
} }
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<!-- <welcome-file-list>
<welcome-file>/vistas/index.jsp</welcome-file>
</welcome-file-list>-->
<servlet> <servlet>
<servlet-name>PersonaServlet</servlet-name> <servlet-name>PersonaServlet</servlet-name>
<servlet-class>demojsoncrud.servlets.PersonaServlet</servlet-class> <servlet-class>demojsoncrud.servlets.PersonaServlet</servlet-class>
......
...@@ -76,7 +76,13 @@ let logOut = () =>{ ...@@ -76,7 +76,13 @@ let logOut = () =>{
window.location.href = 'index.jsp' window.location.href = 'index.jsp'
}) })
} }
/* vista viene = vista de donde viene sin .jsp
* vista va = vista a donde va con .jsp
* */
function setActive(vistaViene,vistaVa){
Cookies.set("active",vistaViene, {expiry : 100});
window.location.href=vistaVa;
}
logOut(); logOut();
//document.querySelector('#logOut').addEventListener('click', (e) => { //document.querySelector('#logOut').addEventListener('click', (e) => {
// Cookies.clear('Authorization') // Cookies.clear('Authorization')
......
/*Obtiene el cookie y asigna una clase*/
let getActive = () =>{
let active = Cookies.get('active');
$("#"+active).parent('li').addClass('active');
}
getActive();
let getActive = () =>{
let active = Cookies.get('active');
console.log(active);
$("#"+active).parent('li').addClass('active');
}
getActive();
...@@ -20,7 +20,7 @@ const ajaxRequest = obj => { ...@@ -20,7 +20,7 @@ const ajaxRequest = obj => {
}) })
} }
/*Envio de datos al servicio REST*/
// http request // http request
const httpRequest = { const httpRequest = {
login(params) { login(params) {
......
...@@ -158,7 +158,7 @@ const persona = { ...@@ -158,7 +158,7 @@ const persona = {
data: 'null', data: 'null',
className: 'text-center', className: 'text-center',
render: function (data, type, row) { render: function (data, type, row) {
return "<i class='icon-forward'></i>"; return "<a href='javascript:void(0)' class='click' onclick='setActive(\"mantenimientoPersona\",\"detalleMantenimientoPersona.jsp\")' ><i class='icon-forward'></i>";
} }
} }
], ],
......
...@@ -3,7 +3,7 @@ let getMenu = () => { ...@@ -3,7 +3,7 @@ let getMenu = () => {
} }
let setMenu = () => { let setMenu = () => {
let location = window.location; let location = window.location;
let position =getUrl(location.pathname); let position =getUrl(location.pathname,"/");
let path = location.pathname.substring(position+1);//obtiene el nombre de la vista jsp para activar la clase .active let path = location.pathname.substring(position+1);//obtiene el nombre de la vista jsp para activar la clase .active
let menu = document.getElementById("MENU"); let menu = document.getElementById("MENU");
let contenido = getMenu(); let contenido = getMenu();
...@@ -19,6 +19,12 @@ let setMenu = () => { ...@@ -19,6 +19,12 @@ let setMenu = () => {
+ '<span>'+modulo[i]['nombre']+'</span>' + '<span>'+modulo[i]['nombre']+'</span>'
+ '</a>'; + '</a>';
for(let j in categoria){ for(let j in categoria){
let idCategoria="";
if (categoria[j]['url'].length>4){
let categoriaUrl = categoria[j]['url'].toString();
idCategoria = categoriaUrl.substr(0,categoriaUrl.length-4);//Quitar el .jsp
console.log("ID CATEGORIA ;: "+idCategoria);
}
let subCategoria = modulo[i]['subCategoria']; let subCategoria = modulo[i]['subCategoria'];
html+= '<ul>'; html+= '<ul>';
if(path === categoria[j]['url']){ if(path === categoria[j]['url']){
...@@ -27,9 +33,9 @@ let setMenu = () => { ...@@ -27,9 +33,9 @@ let setMenu = () => {
html+= '<li>'; html+= '<li>';
} }
if(subCategoria===undefined){ if(subCategoria===undefined){
html+= '<a class="addClass" id="'+categoria[j]['url']+'" href="../vistas/'+categoria[j]['url']+'">'; html+= '<a class="" id="'+idCategoria+'" href="../vistas/'+categoria[j]['url']+'">';
}else{ }else{
html+= '<a class="addClass" id="'+categoria[j]['url']+'" href="'+window.location+categoria[j]['url']+'">'; html+= '<a class="" id="'+idCategoria+'" href="'+window.location+categoria[j]['url']+'">';
} }
html+= '<span>'+categoria[j]['nombre']+'</span>' html+= '<span>'+categoria[j]['nombre']+'</span>'
+ '</a>'; + '</a>';
...@@ -51,11 +57,15 @@ let setMenu = () => { ...@@ -51,11 +57,15 @@ let setMenu = () => {
html+='</li>'; html+='</li>';
} }
menu.innerHTML=html; menu.innerHTML=html;
// let activeUrl = window.location.href.substring(getUrl(location.href,"=")+1);
// let active = activeUrl.substring(0,activeUrl.length-4);
// $("#"+active).parent('li').addClass('active');
} }
let getUrl = (pathname) => { let getUrl = (pathname,caracter) => {
let position = 0; let position = 0;
for (let i = pathname.length-1; i > 0; i--) { for (let i = pathname.length-1; i > 0; i--) {
if(pathname[i]==='/'){ if(pathname[i]===caracter){
position = i; position = i;
break; break;
} }
......
<%--
Document : detalleMantenimientoPersona
Created on : 24/04/2018, 10:50:46 AM
Author : sistem08user
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%> <%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <%@include file="templates/header.jsp" %>
<title>JSP Page</title> <!--template-core-->
<!--css-->
<!--css-->
</head> </head>
<body> <body>
<h1>Hello World!</h1> <%@include file="templates/header-body.jsp" %>
<%@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-->
<script src="../js/pages/sidebar.js" type="text/javascript"></script>
<script src="../js/pages/detalleMantenimientoPersona.js" type="text/javascript"></script>
</body> </body>
</html> </html>
<%@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" %>
<h1>Detalle Reporte</h1>
<%@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>
<script src="../js/pages/sidebar.js" type="text/javascript"></script>
<!--mi js-->
<script src="../js/pages/detalleReportePersona.js" type="text/javascript"></script>
</body>
</html>
...@@ -70,7 +70,7 @@ ...@@ -70,7 +70,7 @@
</div> </div>
</div> </div>
<!-- / content --> <!-- / content -->
<button id="" onclick="setActive('reportePersona','detalleReportePersona.jsp')" type="button" class="btn btn-primary"><i class="icon-search4 position-left"></i> Ir a Detalle</button>
<%@include file="templates/footer-body.jsp" %> <%@include file="templates/footer-body.jsp" %>
......
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