Bienvenido a re-orientation! Esperamos que encuentres lo que buscas

Configuración del web.xml y declaración de frameworks a usar


Parte del manual paso a paso para desarrollar una aplicación web con Spring Framework + Spring Security contra una base de datos MySQL.

Una vez declaradas y descargadas las dependencias del proyecto, es necesario configurar los ficheros asociados a los frameworks que vamos a usar. Además, como hemos modificado la estructura de tablas contra las que funciona por defecto Spring, tendremos que realizar algunos cambios adicionales a la configuración de Spring Security por defecto.

El fichero web.xml

En el proyecto web (app01) creado por defecto vía Maven, la configuración se encuentra en el archivo web.xml dentro de la ruta app01/src/main/webapp/WEB-INF/web.xml. Además se nos ha creado una página de inicio index.jsp en la ruta app01/src/main/webapp/index.jsp.

Nuestro archivo de configuración del proyecto web.xml ahora mismo está limpio. Si quisiéramos realizar una ejecución de pruebas para ver que el proyecto está operativo, basta con declarar, como punto de entrada de la aplicación, la JSP que nos creó Spring de pruebas en nuestro fichero de configuración.

Quedaría así.
Estructura del web.xml inical

Y la página de inicio quedaría más o menos así.
Página de inicio de aplicación con configuración por defecto

Introduciendo Spring Security

Lo primero que indicaremos en el fichero web.xml, es la ruta donde alojaremos los ficheros de configuración de Spring. Empezando por el contexto, para lo que usaremos el context-param:

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
    classpath:spring/security-context.xml  
  </param-value>
</context-param>

Ahora toca declarar en el web.xml un listener que nos inicialice el contexto definido anteriormente. Esto se hace a través de la siguiente configuración:

<listener>
  <listener-class>
    org.springframework.web.context.ContextLoaderListener
  </listener-class>
</listener>

Por último, declararemos un único filtro indicando que delegamos en Spring Framework todas las operativas de seguridad de la aplicación. DelegatingFilterProxy nos proporcionará el vínculo entre el web.xml y el application context de Spring, y así aprovechar las facilidades a nivel de inyección de dependencias que el framework nos brinda.

<filter>
  <filter-name>springSecurityFilterChain</filter-name>
  <filter-class>
    org.springframework.web.filter.DelegatingFilterProxy
  </filter-class>
</filter>
<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

Al especificar en el filtro el url-pattern anterior, estamos indicando que no serviremos páginas estáticas.

Introduciendo Spring MVC

Ahora vamos a introducir las especificaciones para utilizar en nuestro proyecto Spring MVC

<servlet>
  <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
  <servlet-class>
    org.springframework.web.servlet.DispatcherServlet
  </servlet-class>
  <init-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>
            classpath:spring/mvc-core-config.xml
        </param-value>
  </init-param>
</servlet>
<servlet-mapping>
  <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
  <url-pattern>*.htm</url-pattern>
</servlet-mapping>

Como se muestra en el bloque anterior, la máscara que usaremos para hacer las peticiones de los recursos desde la web será *.htm.

Especificando el Business Config

En nuestra aplicación, vamos a separar la configuración de la capa de negocios en un archivo específico, el Business Config, por lo que lo añadiremos al context-param. Para esto basta con añadir al sub-nodo param-value, el atributo: classpath:spring/business-config.xml.

El fichero web.xml ya completado quedaría así:

<web-app>
	<display-name>Archetype Created Web Application</display-name>

	<context-param>
	  <param-name>contextConfigLocation</param-name>
	  <param-value>
		classpath:spring/security-context.xml, 
		classpath:spring/business-config.xml	
	  </param-value>
	</context-param>

	<filter>
	  <filter-name>springSecurityFilterChain</filter-name>
	  <filter-class>
		org.springframework.web.filter.DelegatingFilterProxy
	  </filter-class>
	</filter>
	<filter-mapping>
	  <filter-name>springSecurityFilterChain</filter-name>
	  <url-pattern>/*</url-pattern>
	</filter-mapping>

	<listener>
	  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<servlet>
	  <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
	  <servlet-class>
		org.springframework.web.servlet.DispatcherServlet
	  </servlet-class>
	  <init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring/mvc-core-config.xml</param-value>
	  </init-param>
	</servlet>

	<servlet-mapping>
	  <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
	  <url-pattern>*.htm</url-pattern>
	</servlet-mapping>
</web-app>

Ya hemos finalizado con el web.xml. Ahora tenemos que crear en la ruta app01/src/main/resources/spring/ los ficheros que hemos especificado y añadir a éstos las configuraciones específicas en cada caso. Los contenidos asociados a estos ficheros los iremos tratando por separado a continuación:

Una vez creados todos los ficheros de configuración que vamos a necesitar, la estructura del proyecto tendrá un aspecto similar a éste (en la imagen aparecen, además de los mencionados anteriormente, los ficheros asociados a la configuración del datasource, que veremos más adelante):

Estructura proyecto con ficheros spring

Terminos Tecnología: