Hasta ahora no me habia surgido la necesidad de tener una ruta en tomcat que necesitase un acceso con una validacion por parte del servidor de aplicaciones. Normalmente esta validacion se hace desde apache con el modulo auth_basic que permite pedir un usuario y una contraseña para acceder a una ruta concreta o incluso a un fichero concreto.

Si tienes el modulo JK para conectar apache y tomcat, este problema lo tienes resuelto. porque puedes seguir haciendo la autenticacion a traves de Apache. Pero que pasa si no quieres/no te apetece, o simplemente no sabes implementar mod_jk o no quieres cargar al servidor con un apache para servidor tus aplicaciones java por el puerto 80/443?

Pues puedes hacerlo de la siguiente manera:

1º Busca el fichero tomcat-users.xml que habitualmente esta en la ruta /var/lib/tomcat7/conf/ en una instalacion estandard por paqueteria de Debian.

vi  /var/lib/tomcat7/conf/tomcat-users.xml

2º Descomenta la seccion inferior dentro de la etiqueta
Edita el rol, y en el rolename pon el nombre que se te ocurra. Por ejemplo en mi caso

<tomcat-users>
<role rolename="application"/>
<user username="nombre_de_usuario" password="clave_de_usuario" roles="application"/>
</tomcat-users>

Evidentemente los datos vana a gusto del consumidor (nombre_de_usuario, clave_de_usuario, application)

3º Ahora nos queda el ultimo paso, que es editar el WEB-INF/web.xml dentro de la aplicacion a proteger y añadir al final, antes de la etiqueta

        <security-constraint>
                <web-resource-collection>
                        <web-resource-name>Wildcard means whole app requires authentication</web-resource-name>
                        <url-pattern>/*</url-pattern>
                        <http-method>GET</http-method>
                        <http-method>POST</http-method>
                </web-resource-collection>
                <auth-constraint>
                        <role-name>application</role-name>
                </auth-constraint>

                <user-data-constraint>
                        <!-- transport-guarantee can be CONFIDENTIAL, INTEGRAL, or NONE -->
                        <transport-guarantee>NONE</transport-guarantee>
                </user-data-constraint>
        </security-constraint>

        <login-config>
                <auth-method>BASIC</auth-method>
        </login-config>

En nuestro ejemplo se protege todo el context de la aplicacion, con lo que para acceder a ella habra que introducir las credenciales que aparecen en el tomcat-users.xml

Por ultimo solo nos queda rebotar el servidor de aplicaciones tomcat

/etc/init.d/tomcat7 restart
Via: AVAJAVA