Seguridad en Tomcat
Si queremos proteger ciertos recursos (jsps y servlets) podemos utilizar las
características de Tomcat.
Esta restricción es muy básica y solo limita a que usuarios pueden acceder
a que recursos pero no limita lo que esos usuarios pueden hacer cuando ya han
obtenido el acceso. Por eso, llamaremos a esta seguridad … seguridad de acceso
y deberá ir combinada por una seguridad en nuestra aplicación e incluso en la
base de datos, para que la seguridad sea completa.
Creamos una nueva WebApp
Creamos un directorio colgando de webapps, en este caso
.. llamado roberto
Debemos tocar los ficheros de configuración de apache para que
sea una webapp válida
En el fichero server.xml introducimos un nuevo contexto
En el fichero web.xml, verificamos los ficheros que se buscarán por
defecto en nuestro directorio
Creamos la página index.htm y la probamos
En el mismo directorio podemos ver los usuarios registrados.
Creamos un nuevo usuario.
Vamos a proteger un directorio que vamos a llamar área protegida
Tendremos que hacer algunos cambios en el fichero /roberto/web.xml
Podemos ver que añadimos un nuevo área donde especificamos el patrón sobre
el que se protegerán las páginas
<url-pattern>/areaprotegida/*</url-pattern>
El rol que esta autorizado a acceder
<role-name>intranet</role-name>
Y el formulario que se mostrará cuando alguien intente acceder a ese área
<form-login-page>/areaprotegida/login.jsp</form-login-page>
<form-error-page>/areaprotegida/error.jsp</form-error-page>
<?xml version=»1.0″ encoding=»ISO-8859-1″?>
<!DOCTYPE web-app <web-app> <security-constraint> <!– Default login configuration uses form-based authentication –> <!– Security roles referenced by this web application –> |
La página por defecto, index.htm, muestra el nombre del
usuario y ofrece un link para deslogarse
Tambien podemos ver en negrita el código para procesar la
petición de deslogado
<% if (request.getParameter(«logoff») != null) { session.invalidate(); response.sendRedirect(«index.jsp»); return; } %> <html> <head> <title>Home del área protegida</title> </head> <body bgcolor=»white»> Estas conectado como <b><%= request.getRemoteUser() %></b> <br> Pulse para cerrar la sesión <a href='<%= response.encodeURL(«index.jsp?logoff=true») %>’>aquí</a>. |
Creamos la página de error, que tiene un enlace a la página
de login
<html> <head> <title>Página de Error</title> </head> <body bgcolor=»white»> <br> <a href='<%= response.encodeURL(«login.jsp») %>’> |
Y vemos que la página de login tiene que tener un formulario con unos campos
concretos (en negrita)
<html> <head> <title>Página de Ejemplo</title> <body bgcolor=»white»> <form method=»POST» action=‘<%= response.encodeURL(«j_security_check») %>’> <table border=»0″ cellspacing=»5″> <tr> <th align=»right»>Usuario:</th> <td align=»left»><input type=»text» name=»j_username«></td> </tr> <tr> <th align=»right»>Contraseña:</th> <td align=»left»><input type=»password» name=»j_password«></td> </tr> <tr> <td align=»right»><input type=»submit» value=»Login»></td> <td align=»left»><input type=»reset» value=»Borrar»></td> </tr> </table> </form> </body> </html> |
Probamos la página, y metemos un usuario incorrecto.
Vemos que obtenemos la página de error.
Si volvemos a meter los datos correctos …… nos mostrará la
información adecuada.
Recordar que el usuario y rol lo declaramos anteriormente …
Por cierto, si obtenéis un error como éste, es porque os logais cuando ya estais logados. Debéis invalidar la sesión, por ejemplo, antes de mostrar un formulario de login ….
HTTP Status 404 – /areaprotegida/j_security_checktype Status report message /areaprotegida/j_security_check description The requested resource (/areaprotegida/j_security_check) is not available. Apache Tomcat/5.0.12 |
Esta autentificación es la más simple y a través de fichero …….. en
otros ejemplos os mostraremos como hacerlo con un LDAP.
Este tutorial es excelente aprovecho para consultar algo con tomcat en eclipse y es que intento solucionar este error que coloco más abajo, trabajo en una aplicacion con (richfaces, maven, jsf, jsp), ya tengo las librerias de richfaces, y pienso que el problema es por el mismo tomcat de eclipse ya me han dicho que con maven utilizandolo en el proyecto hay que actualizar el dir lib del target pero ya hasta he creado el war de mi proyecto e iniciando manualmente el tomcat y me funciono la aplicacion no sé porque dentro de eclipse no quiere levantar el servidor del jsp que estoy haciendo, y las configuraciones del web.xml y faces-config.xml estan bien, he verificado este filtro en el web.xml y esta correcto mas abajo despues del error se los muestro a ver si alguien me ayuda por favor?
GRAVE: Excepción arrancando filtro ajax4jsf
java.lang.ClassNotFoundException: org.ajax4jsf.Filter
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1361)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:269)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
at org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:115)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3838)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4488)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
07/13/2010 05:13:20 PM org.apache.catalina.core.StandardContext start
GRAVE: Error filterStart
07/13/2010 05:13:20 PM org.apache.catalina.core.StandardContext start
GRAVE: Falló en arranque del Contexto [/MavenJsf] debido a errores previos
Archivo Web.xml
org.richfaces.SKIN
blueSky
Ajax4jsf Filter
ajax4jsf
org.ajax4jsf.Filter
ajax4jsf
FacesServlet
REQUEST
FORWARD
INCLUDE
JsfProject
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
javax.faces.STATE_SAVING_METHOD
server
FacesServlet
javax.faces.webapp.FacesServlet
1
FacesServlet
/faces/*
¿Porqué usan \\\’\\\’ en lugar de, simplemente \\\»j_security_check\\\» en el ACTION del FORM de la página de login?
Estoy tratando de usar \\\»security-constraint\\\» en Tomcat detrás de Apache (httpd), con mod_jk como conector, pero no logro hacerlo funcionar.
Si apunto el navegador a Tomcat, la aplicación funciona bien, pero si paso a través de Apache, el navegador (Firefox) muestra una página en blanco cuando trato de acceder a los recursos protegidos con el usuario y contraseña correctos.
¿Alguien me puede ayudar?
Muchas gracias.
Hola,
Dónde puedo conseguir los archivos de este ejemplo?, es que no que acaba de quedar claro.
Saludos
Buenas tardes.
Resulta que tengo instalado un Apache Tomcat 8.5 sobre un Windows Server 2008.
Por un tema de seguridad, me pidieron deshabilitar la versión del Apache cuando se produce un mensaje de error:
https://ibb.co/kuhX1v
Lo he intentado pero no hay manera, no soy capaz.
Los archivos de los que dispongo para poder realizar dicha tarea son los siguientes:
https://ibb.co/ciawTa
¿Como tendría que hacer??
Muchas gracias.
Un saludo.