Personal tools
You are here: Home Departaments Informàtica DAI C8 Unitat Didàctica 3: Servlets i JSP Autenticació
Document Actions

Autenticació

Com fer autenticació amb Tomcat

Autenticació

L'autenticació la podem fer "a mà" o basar-nos amb l'ajuda que ens dóna el servidor Tomcat.

Dos punts a tenir en compte:

  • mètode d'autenticació: BASIC, FORM
  • usuaris + rols (realm): usuaris tomcat (per defecte), usuaris en bdd

Mètodes d'autenticació

Autenticació BASIC   

Configuració a web.xml:
<security-role>
<role-name>autbasic</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<url-pattern>/autbasic/*</url-pattern> //zona que volem protegir (podem posar més url-pattern)
</web-resource-collection>
<auth-constraint>
<role-name>autbasic</role-name> //tants role-name com necessitem
        </auth-constraint>
        <user-data-constraint>
<transport-guarantee>NONE</transport-guarantee> //si tinguéssim SSL posaríem CONFIDENTIAL
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>

Autenticació FORM

Configuració a web.xml:

<security-role>
<role-name>autform</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<url-pattern>/autform/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
<role-name>autform</role-name>
        </auth-constraint>
        <user-data-constraint>
            <transport-guarantee>NONE</transport-guarantee>
        </user-data-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/autform/login.jsp</form-login-page>        //pàgina amb el formulari
            <form-error-page>/autform/error.jsp</form-error-page>        //pàgina d'error
        </form-login-config>
</login-config>

La pàgina del formulari ha tenir accio i noms dels camps especials:

<form method="post" action="j_security_check">
    <div>Usuari: <input type="text" name="j_username" /></div>
    <div>Contrasenya: <input type="password" name="j_password" /></div>
    <div><input type="submit" value="Login"/></div>
</form>

En els dos casos podem accedir al nom d'usuari fent:

Principal usu = request.getUserPrincipal();    //java.security.Principal
usu.getName() // <- nom

Usuaris i rols

Usuaris i rols en un fitxer:

Per defecte els usuaris estan al fitxer tomcat-users.xml:

<user password="monica" roles="autbasic,autform" username="monica" />
<user password="anna" roles="autbasic,autform" username="anna" />

El Realm ens ve per defecte, però si volem que només estigui el realm per un context el posem en el context adequat. El que configura el realm és:

<Resource auth="Container"
description="User database that can be updated and saved"
        factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
        name="UserDatabase" pathname="conf/tomcat-users.xml"
        type="org.apache.catalina.UserDatabase" />

i

<Realm
className="org.apache.catalina.realm.UserDatabaseRealm"
        resourceName="UserDatabase" />

Usuaris i rols a base de dades:

S'han de crear dues taules:

  • taula d'usuaris amb 2 columnes (com a mínim): nom d'usuari i contrasenya
  • taula que relacioni rols i usuaris amb 2 columnes (com a mínim): nom d'usuari i nom de rol
create table usuaris
(
  nom_usu varchar(15) not null primary key,
  pass_usu varchar(15) not null
);

create table rols_usuaris
(
nom_usu varchar(15) not null,
  nom_rol varchar(15) not null,
  primary key( nom_usu, nom_rol )
);

Insertem dades:

  • taula usuaris: nom_usu: monica , pass_usu: monica
  • taula rols_usuaris: nom_usu: monica nom_rol: admin


Insertem el realm de bbdd al context:

<Realm
className="org.apache.catalina.realm.JDBCRealm" //nom del realm que usem
driverName="org.postgresql.Driver" //driver bdd
connectionURL="jdbc:postgresql://localhost/bd" //URL conexió bdd
connectionName="usubd" //usuari bdd
connectionPassword="passbd" //pass usuari bdd
userTable="usuaris" //nom taula d'usuaris
userNameCol="nom_usu" //nom columna noms usuaris de taula usuaris
userCredCol="pass_usu" //nom columna passwords usuaris de taula usuaris
userRoleTable="rols_usuaris" //nom taula que relaciona usuaris i rols
roleNameCol="nom_rol" /> //nom columna noms dels rols

Més info:

http://www.javahispano.org/articles.article.action?id=24
http://edocs.bea.com/wls/docs70//webapp/web_xml.html#1044835

Seguretat

 Passwords encriptades:

consola$ dir_tomcat/bin/digest.sh -a MD5 monica
monica:ff0d813dd5d2f64dd372c6c4b6aed086

  1. Posem aquesta password al lloc que toca: tomcat-users o bdd
  2. Li diem al realm que les passwords estan encriptades:
<Realm
className="org.apache.catalina.realm.JDBCRealm"
        driverName="org.postgresql.Driver"
        digest="MD5"
        connectionURL="jdbc:postgresql://localhost/bd"
        connectionName="usubd" connectionPassword="passbd"
        userTable="usuaris" userNameCol="nom_usu" userCredCol="pass_usu"
        userRoleTable="rols_usuaris" roleNameCol="nom_rol" />
Si volem encriptar la pass on-line:
  1. Importem llibreria catalina.jar (està a dir_apache/server/lib)
  2. Usem: RealmBase.Digest("monica","MD5","utf-8") que ens retorna String amb la contrasenya encriptada
Log in


« July 2008 »
Mo Tu We Th Fr Sa Su
123456
78910111213
14151617181920
21222324252627
28293031