Las cookies nos permiten ofrecer nuestros servicios. Al utilizar nuestros servicios, aceptas el uso que hacemos de las cookies. Más Información. Aceptar

Seguridad en Java EE con JDBCRealm - Videotutorial

José Antonio Serrano Rosso
  • Escrito por José Antonio Serrano Rosso el 17 de Mayo de 2017
  • 1 min de lectura | Seguridad
Seguridad en Java EE con JDBCRealm - Videotutorial
El reproductor de video será cargado en breves instantes.

La seguridad de los recursos de las aplicaciones web puede ser controlada de 2 formas diferentes:

  • A través del contenedor (mecanismos integrados).
  • Mediante la propia aplicación web (mecanismos de login).

Apache Tomcat permite incorporar seguridad por medio de Container Managed Security (seguridad basada en contenedores) sobre Realms.

Un Realm (dominio) es una colección (“base de datos”) de usuarios, contraseñas y roles (=grupos de linux) que Tomcat administra y utiliza para gestionar la autenticación a través de una interfaz (*).

(*) Existen 6 diferentes tipos de Realm con soporte para diferentes tipos de fuente de autenticación ( http://tomcat.apache.org/tomcat-8.0-doc/realm-howto.html#Quick_Start )

 

JDBCRealm suministra mucha más flexibilidad que UserDatabaseRealm , debido a que utiliza un acceso más dinámico a los datos mediante una conexión JDBC a una base de datos relacional (MySQL, Oracle, SQL Server, …) donde se almacenarán los usuarios y roles.

Este tipo de base de datos de usuarios se recomienda para aplicaciones con un gran número de usuarios .

La configuración de JDBCRealm se realiza en el fichero META-INF/context.xml de la aplicación web y al establecerse se omite la seguridad basada en UserDatabaseRealm (fichero tomcat/conf/tomcat-users.xml).

El driver de conexión con la base de datos relacional a utilizar debe copiarse al directorio tomcat/lib para que este disponible para el uso de este tipo de seguridad.

Definir base de datos y conector JDBC

Utilizamos MySQL Workbench. Tenemos que definir 2 tablas (usuario y roles) con los siguientes campos obligatorios y el resto opcionales según nuestro modelo de aplicación:

  • Tabla usuarios (e.j. “Users”)
    • username
    • password
  • Tabla roles (e.j. “Roles”)
    • username
    • role

Imagen 0 en Seguridad en Java EE con JDBCRealm - Videotutorial

Carga inicial de la BD con los mismo perfiles que en el ejemplo anterior:


INSERT INTO realm.Users VALUES (1, 'Ruben Marín', 'ruben@dominio.com', '600500400', 'rmarin', md5('rmarin'));
INSERT INTO realm.Users VALUES (2, 'José Antonio Serrano', 'jaserrano@dominio.com', '600700800', 'jaserrano', md5('jaserrano'));
INSERT INTO realm.Roles VALUES (1, 'student', 'Estudiantes', 'usuario', 'student');
INSERT INTO realm.Roles VALUES (2, 'teacher', 'Profesores', 'jaserrano', 'teacher');
INSERT INTO realm.Roles VALUES (3, 'student', 'Estudiantes', 'jaserrano', 'student');
INSERT INTO realm.Roles VALUES (4, 'student', 'Estudiantes', 'rmarin', 'student');

Aseguramos conectar con BD en tomcat/lib/mysql-connector-java-5.1.41-bin.jar

Fichero /META-INF/context.xml de la aplicación web

Tenemos que añadir a este fichero un tag <Realm>.

  • Tag Realm.
  • Datos y driver para conexión con la base de datos.
  • Correspondencia con las columnas de la base de datos que hemos definido. Indicamos que se utilizará MD5 para la codificación de la contraseñas

<?xmlversion="1.0"encoding="UTF-8"?>
<Contextpath="/JSTL_EL">

	<RealmclassName="org.apache.catalina.realm.JDBCRealm"
		connectionName="root"connectionPassword="holamundo"
		connectionURL="jdbc:mysql://localhost:3306/realm"driverName="com.mysql.jdbc.Driver"
		digest="MD5"roleNameCol="role"userCredCol="password"userNameCol="username"
		userRoleTable="Roles"userTable="Users"/>
          
</Context>

Fichero /WEB-INF/web.xml de la aplicación web Igual que UserDatabaseRealm

  • Indicar los recursos protegidos añadiendo un tag “<security-constraint>”
     
  • Tag “<url-pattern>” indicamos los recursos que necesitarán autenticación.
     
  • Tag “<auth-constraint>” define los roles de usuarios que tendrán acceso los ficheros del directorio protegido.
     
  • Autenticación de tipo FORMpor lo que se abrirá el formulario de login definido “login.jsp” y en caso de error mostrará “error.jsp” habitualmente para imprimir un mensaje encima o debajo del formulario de login.
<?xmlversion="1.0"encoding="UTF-8"?>
<web-appversion="3.1"xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <session-config>
    	<session-timeout>35</session-timeout>
	</session-config>
	
	
	<security-constraint>
		<display-name>Accesosolo paraprofesores</display-name>
		<web-resource-collection>
			<web-resource-name>Zonaprotegida</web-resource-name>
			<url-pattern>/privado/*</url-pattern>
		</web-resource-collection>
		<auth-constraint>
			<role-name>teacher</role-name>
		</auth-constraint>
	</security-constraint>
	
	
	<security-constraint>
		<display-name>Accesoparaalumnos</display-name>
		<web-resource-collection>
			<web-resource-name>Zonacompartida</web-resource-name>
			<url-pattern>/publico/*</url-pattern>
		</web-resource-collection>
		<auth-constraint>
			<role-name>student</role-name>
		</auth-constraint>
	</security-constraint>
	
	
	<login-config>
		<auth-method>FORM</auth-method>
		<form-login-config>
			<form-login-page>/login.jsp</form-login-page>
			<form-error-page>/error.jsp</form-error-page>
		</form-login-config>
	</login-config>
</web-app>	-Indicar los recursos protegidos añadiendo un tag “<security-constraint>”

descarga-guia-eclipse

Estas son algunas de las empresas que ya confían en OpenWebinars

Profesores y profesionales

Nuestros docentes son profesionales que trabajan día a día en la materia que imparten

Conviértete en profesor de OpenWebinars