Para servir desde un servlet una imagen de acceso restringido
Se muestra el código necesario para poder visualizar una imagen dependiendo de los permisos del usuario, esta se devuelve desde un servlet que será el encargado de comprobar si el usuario tiene permiso para poder ver la imagen.
Por Daniel Prado 2 min de lectura Revisado el
Comprobado: Revisión contextual, no ejecución del código: Jakarta Servlet 6.1 (jakarta.ee).
Contexto de este artículo
- Tecnología y versión: Java Servlet con javax.servlet; versión exacta no indicada.
- Año del artículo: 2005.
- Estado a 11 de octubre de 2026: Concepto vigente, ejemplo de una API anterior. La referencia actual es Jakarta Servlet; este código no se ha auditado como mecanismo de autorización.
- Documentación de referencia: Jakarta Servlet 6.1.
Conservo a continuación el texto y los ejemplos de aquella fecha como archivo técnico. No he ejecutado estos ejemplos en un entorno actual: esta revisión contextual no garantiza que funcionen hoy.
Este código nos servirá como ejemplo para lanzar otros tipos de archivos que no sean imágenes que también tengan algún tipo de acceso restringido.
En primer lugar deberemos de sustituir la url de la imagen por la del servlet que nos la devuelve, es decir las etiquetas img quedarían de la siguiente manera:
<img src="direcciónServlet\nombreServlet"/>
Como vemos se sustituirá el recurso de la imagen por el servlet que nos lo devuelve.
El código es el siguiente:
package utils.imagenes;
import javax.servlet.http.HttpServlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import java.text.*;
import com.ti.comunes.*;
import utils.constantes.*;
public class Obtener_Imagen extends HttpServlet {
public void init() throws ServletException {
}
public void doPost(
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
throws javax.servlet.ServletException, java.io.IOException {
}
public void doGet(
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
throws javax.servlet.ServletException, java.io.IOException {
String myID = (String) request.getParameter("ID");
try {
//primeramente, comprobamos que se ha pasado el ID, si no existe no se devuelve foto
if (myID == null)
throw new Exception("[utils.imagenes.ObtenerImagen]Parametro tiene un valor desconocido");
else
{
try{
//leemos el fichero del ftp,usando el metodo que traduce el path
File f = new File(utils.constantes.ConstantesRID.FILE_PATH+myID+".jpg");
RandomAccessFile raf = new RandomAccessFile(utils.constantes.ConstantesRID.FILE_PATH+myID+".jpg", "r");
FileInputStream fis = new FileInputStream(f);
FileReader fr = new FileReader(f);
int i;
byte b[] = new byte[(int) f.length()];
raf.read(b);
//cabecera
response.setHeader("Content-Type","img/jpeg");
response.setIntHeader("Content-Length", (int) f.length());
//response.setHeader("Accept-Ranges", "bytes");
//lo escribimos
OutputStream out = response.getOutputStream();
out.write(b);
out.close();
raf.close();
fis.close();
fr.close();
}
catch (FileNotFoundException fe)
{
throw new Exception();
}
}
}
catch(Exception e) {
System.out.println(e.getMessage());
//salida a pagina de error y devolver foto por defecto
//leemos el fichero del ftp por defecto
File f = new File(Constants.FotoPathDefault); //Const..Default à Es un _String con la url
RandomAccessFile raf = new RandomAccessFile(Constants.FotoPathDefault, "r");
FileInputStream fis = new FileInputStream(f);
FileReader fr = new FileReader(f);
int i;
byte b[] = new byte[(int) f.length()];
raf.read(b);
//cabecera
response.setHeader("Content-Type","img/jpeg");
response.setIntHeader("Content-Length", (int) f.length());
//response.setHeader("Accept-Ranges", "bytes");
//lo escribimos
OutputStream out = response.getOutputStream();
out.write(b);
out.close();
raf.close();
fis.close();
fr.close();
} //catch
} //doGet
}
Comentarios
Aún no hay comentarios. ¡Sé el primero!