Mostrando entradas con la etiqueta SPRING SECURITY. Mostrar todas las entradas
Mostrando entradas con la etiqueta SPRING SECURITY. Mostrar todas las entradas

sábado, 20 de agosto de 2011

DEMO SPRING SECURITY 3.0.3 [BASE DE DATOS] + MVC

Hola en esta oportunidad hablare un poco sobre el tema: 'Spring Security' específicamente amarrado no a la memoria sino en BD. En si Spring Security es un subproyecto del framework Spring, que nos brinda una facilidad para gestionar la seguridad de nuestras aplicaciones Java J2EE. Las ventajas que nos brinda este Framework son:

- Seguridad a nivel de URL.
- Seguridad a nivel de BD (ROLES, GRUPOS).
- Facilidad para separar la lógica de nuestras aplicaciones del control de la seguridad, utilizando filtros.
- Seguridad a nivel de Interfaz mediante Security Tags.


En la demo preparada vamos a ver, con un ejemplo que muestra la configuración de Spring Security para controlar el acceso a los recursos de una aplicación, por medio de la asignación de grupos de usuarios a nivel de Base de Datos, los cuales se podrán modificar desde dicha base de datos. También, la forma de cómo controlar lo mostrado por Spring Security por medio de la Interfaz. También, parte del demo esta basado en Spring MVN en lo relacionado a la navegación del aplicativo.

El Script preparado esta adaptado a MySQL, pero se podría también ser adaptado a otros motores de datos como ORACLE, SQL SERVER, etc. Lo que si deben manejar las mismas tablas con los mismos nombres, campos, amarres y referencias. Dicho Script se encuentra en la ruta:

DemoSpringSecurity_MVC\src\main\resources\Script\ScriptSpringSecurity.sql

Las características del demo preparado son: Esta basado en JAVA J2EE y consta del manejo de las siguientes tecnologías y herramientas:

- Spring Suite v2.5
- SPRING SECURITY 3.0.3
- SPRING 3.0.3
- SPRING MVC 3.0.3
- MAVEN 2.2
- MySQL 5.0
- JSP 1.2 ( con XHTML 1.0)
- Include.
- JSTL 1.2
- etc


Cabe recalcar el manejo de los Tags importantes que posee Spring Security en dicho demo los cuales son:

- [security:authentication property="principal.username" /] = Permite el la visualización del usuario logueado en el sistema.

-[a href="[c:url value="/j_spring_security_logout" /]" ] = Permite ejecutar un Link para cerrar la sesión de Spring Security.

- [security:authorize ifAllGranted] = Aplicado al usuario con todos los roles.
- [security:authorize ifAnyGranted] = Aplicado al usuario con algún rol especifico.
- [security:authorize ifNotGranted] = Aplicado al usuario con sin ningún tipo de rol.

Dentro del archivo: spring-security.xml, para poder trabajar con BD se debe de realizar la configuración siguiente:

[!-- **** SEGURIDAD: 'MANAGER DE AUTENTICACION' **** --]
[security:authentication-manager alias="authenticationManager" ]
[security:authentication-provider user-service-ref="userService" /]
[/security:authentication-manager]

[!-- **** BEAN 'JDBCDAOIMPL' **** --]
[beans:bean id="userService" class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl" ]
[beans:property name="dataSource" ref="seguridadDataSource" /]
[beans:property name="enableGroups" value="true" /]
[beans:property name="enableAuthorities" value="false" /]
[/beans:bean]

[!-- **** BEAN 'DATASOURCE' **** --]
[beans:bean id="seguridadDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" ]
[beans:property name="driverClassName" value="com.mysql.jdbc.Driver" /]
[beans:property name="url" value="jdbc:mysql://localhost:3306/DB_SPRING_SECURITY" /]
[beans:property name="username" value="root" /]
[beans:property name="password" value="root" /]
[/beans:bean]


En esta configuración lo resaltante es justamente la selección de las dos formas de trabajo con BD:

[beans:property name="enableGroups" value="true" /] = Para habilitar el manejo a nivel de GRUPOS.

[beans:property name="enableAuthorities" value="false" /] = Para habilitar el manejo a nivel de ROLES.


Por otro lado los GRUPOS conocidos son:
- ROLE_ADMIN: Grupo de Administradores.
- ROLE_USER: Grupo de Usuarios.

Pero se pueden registrar en BD otros grupos en mi caso registre:

- ROLE_SUPERVISOR = Grupo de Supervisores.

Y se configuran en: spring-security.xml.

Las tablas de BD utilizadas de forma STANDAR son:

- USERS
- GROUPS
- GROUP_MEMBERS
- AUTHORITIES
- GROUP_AUTHORITIES


Luego de su configuración se puede probar este Query para ver los amarres respectivos:

SELECT U.USERNAME, U.PASSWORD, U.ENABLED,
GA.AUTHORITY, GM.GROUP_ID
FROM USERS U,
GROUP_AUTHORITIES GA,
GROUP_MEMBERS GM
WHERE U.USERNAME = GM.USERNAME
AND GA.GROUP_ID = GM.GROUP_ID;


La Navegación y redireccionamiento se puede controlado desde el mismo archivo de configuración: spring-security.xml, o hacerle referencia a una clase controladora (que es la forma que en este caso estamos controlado), llamada:

DemoSpringSecurity_MVC\src\main\java\org\java\security\controller\LoginController.java


La Configuración de Privilegios Inicial 'Por GRUPO' aplicada es:

I. RGUERRA:
1- - GRUPO: [ ROLE_ADMIN ]
2- - ESTADO: [ ACTIVADO ]
3- - PROVILEGIO: [ listado, informacion ]

II. RLOZA:
1- - GRUPO: [ ROLE_USER ]
2- - ESTADO: [ ACTIVADO ]
3- - PROVILEGIO: [ listado, informacion ]

III. CCOTRINA:
1- - GRUPO: [ ROLE_SUPERVISOR ]
2- - ESTADO: [ ACTIVADO ]
3- - PROVILEGIO: [ listado ]


El 'NO ACCESO' de algún sitio debido a 'PRIVILEGIOS', redireccionara de forma AUTOMÁTICA a: [accesoRestringido] .

0. Validación Login:

1.Login [RGuerra]:

2.MenuPrincipal [RGuerra]:

3.Listado [RGuerra]:

4.Informacion [RGuerra]:

1.Login [RLoza]:

2.MenuPrincipal [RLoza]:

3.Informacion [RLoza]:

4.Informacion [RLoza]:

1.Login [CCotrina]:

2.MenuPrincipal [CCotrina]:

3.Listado [CCotrina]:

4.Informacion [CCotrina_Protegida]:

Si se activa la configuración deshabilitada para el Grupo: ROLE_SUPERVISOR se mostrara:

5.Informacion [CCotrina]:


Para descargar el demo completo pulsar Aquí

Saludos.