Control de acceso a una aplicación web
- Requisitos
Necesitamos implantar un control de acceso de usuarios lo más genérico y simple posible a una aplicación web desplegada sobre Tomcat. Para ello tendremos una lista de usuarios admitidos a la aplicación web con sus respectivas contraseñas.
- Análisis
En la mayoría de aplicaciones web se necesita un control de acceso muy personalizado, para presentar la información personal de la persona que navega, las herramientas a las que tiene acceso y sus datos de trabajo personales, como su agenda. En general los mecanismos de identificación, cambio de contraseña y datos, mensajes personalizados, pantallas y enlaces particulares… Y por tanto exige un desarrollo personalizado y costoso.
Para desarrollar un mecanismo de control de acceso genérico de usuarios basado en Struts no necesitamos tanto (acceso.war, que no puedo subir).
Pero si es algo incluso más sencillo y no queremos código, Tomcat nos permite implementar esta funcionalidad de una forma rápida y sencilla.
- Diseño
Necesitaremos la lista de usuarios y sus respectivas contraseñas, e identificar las zonas de la aplicación web de acceso restringido. Típicamente se restringe toda la aplicación, ya que si queremos algo más personal se desarrolla a medida.
- Implementación
En el web.xml de la aplicación, declaramos los siguientes parámetros siguiendo las especificaciones de la DTD para mantener el orden:
- Definimos la zona a la que aplicaremos el control de acceso (en este ejemplo, toda la aplicación web)
- Asignamos un rol que permite el acceso a esta zona (en este ejemplo, intranet)
- Definimos el tipo de control que implementaremos (BASIC en este ejemplo, debido a que no requiere desarrollo; FORM)
- Declaramos los roles que se van a utilizar en la aplicación (en este caso, únicamente intranet).
<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<!DOCTYPE web-app
PUBLIC “-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN”
“http://java.sun.com/j2ee/dtds/web-app_2_2.dtd”>
<web-app>
<display-name>Aplicación Web</display-name>
<description>Descripción de la aplicación Web</description>
<!– Standard Action Servlet Configuration (with debugging) –>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!– Standard Action Servlet Mapping –>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<!– The Usual Welcome File List –>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!– Struts Tag Library Descriptors –>
<taglib>
<taglib-uri>/tags/struts-layout</taglib-uri>
<taglib-location>/WEB-INF/struts-layout.tld</taglib-location>
</taglib>
<!– Seguridad –>
<security-constraint>
<web-resource-collection>
<web-resource-name>Área protegida</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>intranet</role-name>
</auth-constraint>
</security-constraint>
<!– Default login configuration uses form-based authentication –>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Autentificación por formulario</realm-name>
</login-config>
<!– Security roles referenced by this web application –>
<security-role>
<role-name>intranet</role-name>
</security-role>
</web-app>
Necesitamos crear los roles y los usuarios en el tomcat-users.xml:
<?xml version=’1.0′ encoding=’utf-8′?>
<tomcat-users>
<role rolename=”tomcat”/>
<role rolename=”role1″/>
<role rolename=”manager”/>
<role rolename=”admin”/>
<role rolename=”intranet”/>
<user username=”tomcat” password=”tomcat” roles=”tomcat”/>
<user username=”role1″ password=”tomcat” roles=”role1″/>
<user username=”both” password=”tomcat” roles=”tomcat,role1″/>
<user username=”desarrollo” password=”avanti” roles=”intranet”/>
<user username=”admin” password=”admin” roles=”admin,manager”/>
</tomcat-users>
- Resultado