Regístrate para votar
Extensión de SSL para Struts
Prólogo (por Roberto Canales Mora)
Struts es uno de los Frameworks elegidos dentro de www.autentia.com para nuestro trabajo diario. Hay que entender que Struts no es más que la base de lo que podría ser un Framework más completo y de más alto nivel (tipo Spring ). Para que un Framework de este estilo sea realmente útil hay que invertir tiempo y recursos en mejorarlo y ampliarlo, dotándolo de sistemas sencillos de control de:
-
Seguridad
-
Velocidad
-
Navegación
-
Caché
-
Trazas de CRM operacional
-
Etc.
Entre las ventajas de Struts cabe destacar que, sin demasiada complejidad (curva de aprendizaje reducida), te permite extenderlo para adaptarlo a tus necesidades, fundamentalmente en empresas grandes. Hay además muchas extensiones estándar.
Una de las cosas que te permite (y que mucha gente obvia) es que si las piezas que hay que construir son las mismas (acciones, formularios, jsps, tags ...) podemos crear una metodología de análisis y diseño orientado a objeto (el análisis no es Orientado a Objeto ... aunque puede ser amistoso ) para sacarle partido a este Framework (uno de nuestro cursos más demandados en Autentia.com http://www.adictosaltrabajo.com/plantillas/autentiafor.php )
Hoy Miguel nos va a contar como resolver de un modo estándar uno de los problemas con Struts ..... forzar el uso de SSL para transacciones seguras ...
Introducción
En casi todas las aplicaciones Struts orientadas a comercio, es necesario el uso de conexiones seguras por SSL para garantizar la seguridad de las comunicaciones electrónicas. No obstante, dado el bajo porcentaje (un diez por ciento) de transmisiones por HTTPS, no resulta eficiente desplegar una aplicación Web completa en SSL. La solución con mayor rendimiento propone desplegar una aplicación en HTTP y emplear HTTPS únicamente con aquellas páginas que transmitan datos comprometidos.
La solución ideal es proponer un sistema que utilice de manera automática el protocolo adecuado en el momento de acceder a los recursos de la Red (en tiempo de ejecución).
En la actualidad, Struts 1.0 y superiores ya incluyen una extensión que implementa esta funcionalidad de redirección: sslext. Define un marco de trabajo en el que los desarrolladores pueden especificar qué peticiones de acciones requieren HTTPS y cuáles HTTP, además de redirigir peticiones erróneas (este producto puede obtenerse del correspondiente enlace en SourceForge.net). Este tutorial únicamente pretende enseñar el funcionamiento de esta extensión mostrando su implementación.
Extensión de Struts para SSL
A continuación vamos a explicar el funcionamiento de SSL mediante un sencillo tutorial, en el que describimos todos los pasos para extender la funcionalidad de Struts para que pueda redirigir de forma dinámica las URL por el protocolo correspondiente.
1. Actualización de propiedades en struts-config.xml
Para detectar si una petición de acción ha de ser transmitida por HTTP (puerto 80) o por HTTPS (puerto 443), debemos añadir en struts-config.xml una nueva propiedad que interprete esta especificación y transmita la petición por el puerto correspondiente.
Para poder ampliar la funcionalidad de la etiqueta <action>, Struts define la etiqueta <set-property>, que permite asignar un nombre y un valor de propiedad nuevos a la acción.
Procedemos a crear una propiedad de nombre secure en MiAccion:
|
<action path="/MiAccion"
type="test.ssl.MiAccion" > |
El valor de secure nos indica si la transmisión es por HTTP (true) o por HTTPS (false).
2. Creación de una extensión de ActionMapping
Para usar esta nueva propiedad, tenemos que extender la definición de ActionMapping para que la incluya. Para ello, definimos una extensión de ActionMapping, a la llamaremos SecureActionMapping, la cuál especificará nuestra propiedad.
A continuación, presentamos la definición de SecureActionMapping:
|
/** * SecureActionMapping class */
package
org.apache.struts.action;
protected boolean
secure;
public void
setSecure(boolean b){
|
3. Actualización de mapping en web.xml
Para poder utilizar nuestra nueva clase, debemos indicarle al ActionServlet que debe utilizar SecureActionMapping en lugar de ActionMapping. Para realizar esto, hay que actualizar la entrada de servlet de ActionServlet en el fichero web.xml: basta con añadir otro parámetro de inicialización, de nombre mapping, que indique a nuestro ActionServlet qué clase usar para mapear (nota: tiene que ser una clase que herede de ActionMapping).
Nuestro fichero web.xml debería mostrar algo así:
|
<servlet
id="Servlet_1">
|
Ahora, cuando ActionServlet parsea
struts-config.xml, crea una instancia
de SecureActionMapping para MiAccion. Cuando capta la nueva
propiedad secure, encuentra el método getSecure().
4. Actualización de servlet en web.xml
Ahora, hay que especificar dos nuevas propiedades que contengan los números de puerto de los protocolos HTTP y HTTPS. Estas propiedades son definidas como cualquier otro parámetro de inicialización. Las llamamos http-port y https-port: para estos nombres, el sistema les asigna por defecto los valores de puerto 80 y 443 si no son introducidos (nosotros optamos por hacerlo).
Al igual que en los dos pasos anteriores, para poder usar estas propiedades hay que añadirlas en una extensión del fichero ActionServlet, a la que vamos a llamar SecureActionServlet; después actualizamos la entrada correspondiente en web.xml para que detecte nuestro nuevo fichero de configuración de servlets.
En este caso vamos a empezar por la definición de las nuevas propiedades y la captura del nuevo servlet de acción en web.xml, dejando para más adelante el código de secureActionServlet (por ser bastante extenso).
Este es el aspecto de web.xml, tras actualizarlo:
|
<servlet
id="Servlet_1">
|
5. Creación de una extensión de ActionServlet
SecureActionServlet implementa la lógica de negocio necesaria para redirigir una petición de acción al protocolo apropiado. En primer lugar encuentra el objeto SecureActionMapping, necesario para captar el objeto que contiene la propiedad secure. A continuación, comprueba el valor de secure en ese objeto para determinar qué protocolo utilizar.
Este es el aspecto del archivo SecureActionServlet, una vez implementado:
|
package
org.apache.struts.action;
|
Referencias
La mayor parte del contenido de este tutorial ha sido realizado a partir de la página “Mix protocols transparently in Web applications”, de Steve Ditlinger, en la página oficial de de Java World. Se puede acceder a su artículo desde este enlace.
Conclusiones
No olvidéis que en www.autentia.com os podemos ayudar a trabajar de un modo profesional con Struts o formar a vuestros equipos en "Técnicas Avanzadas de Análisis y Diseño Orientado a Objeto"
Puedes opinar o comentar cualquier sugerencia que quieras comunicarnos sobre este tutorial; con tu ayuda, podemos ofrecerte un mejor servicio.
Comentarios
-
Roberto2008-08-26 - 12:44:36 PMEl tutorial es bastante bueno, pero al probar no me esta funcionando debido a que dos de los metodos no me los esta reconociendo. Estos metodos son: processPath() processMapping() los dos en (SecureActionServlet) y estoy intentado buscar de donde son y no lo consigo ver, y el Myeclipse me indica que no existen.. Otro problema lo tengo con sslext-1.2-2004-09-18.jar el cual contiene la clase SecureRequestUtils y el metodo getRedirectString pero no con esos parametros. Si puedes echarme un cable. Muchas gracias!
-
Juan2007-03-28 - 12:36:13 PMEl tutorial es bastante claro y sencillo, sin embargo al probarlo me estoy volviendo loco con dos metodos que no se de donde salen en la clase SecureActionServlet. Estos metodos son: processPath() processMapping() Deben de ser metodos de la clase de la que extiende(ActionServlet), pero mi editor me indica que no existen. Estoy usando struts-1.2.4. Si pudieras ayudarme.... gracias!








