martes, 16 de enero de 2007

Authenticacion Web con JSP/Servlet

Yo creía que la authentication tipo Realm era únicamente en la configuración del contenedor,

        // para ver si se autenticó
String auth = request.getHeader(
"Authorization");
//si no se autenticó...
if (auth == null) {
//... responder al cliente que no está autorizado...
response.setStatus(response.SC_UNAUTHORIZED);
//... y pedir que se autentique.
response.setHeader(
"WWW-Authenticate", "Basic realm=\"Esbas\"");
}
else { // si se auténtico..
//obtenemos el par usuario/contrasenia encriptada
//... pero se antepone la palbra Basic
String cad = auth.substring(
6).trim();
//.. la clave está encriptada en BASE64..
sun.misc.BASE64Decoder decoder =
new sun.misc.BASE64Decoder();
//... asi que lo decodificaremos
String clave =
new String(decoder.decodeBuffer(cad));
//.. y listo, ya tenemos el par usuario/contraseña
out.println(clave);
}

sábado, 13 de enero de 2007

JSP Invisibles (con Struts)

No es buena idea que se accedan directamente a los JSP. Debería hacerse a través de un Action, o un forward:

<html:link action="/algunAction">...</html:link>

Y para asegurarnos de que no lo va hacer, es mejor protegerlo desde la configuración de la aplicación web:
<web-app>
...
<security-constraint>
<web-resource-collection>
<web-resource-name>no_access</web-resource-name>
<url-pattern>*.jsp</url-pattern>
</web-resource-collection>
<auth-constraint>
</auth-constraint>
...
</security-constraint>
</web-app>