PDF de programación - Sesión 7: Seguridad con Spring Security

<<>>
Imágen de pdf Sesión 7: Seguridad con Spring Security

Sesión 7: Seguridad con Spring Securitygráfica de visualizaciones

Publicado el 21 de Enero del 2019
674 visualizaciones desde el 21 de Enero del 2019
599,7 KB
19 paginas
Experto Universitario Java Enterprise

Spring

Sesión 7: Seguridad con Spring

Security

Seguridad con Spring Security

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

1



Experto Universitario Java Enterprise

Indice

• Configuración básica
• Autentificación contra una base de datos
• Personalización de la seguridad web
• Seguridad de la capa de negocio

Seguridad con Spring Security

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

2



Experto Universitario Java Enterprise

Spring Security

• Subproyecto de Spring (no es parte del core framework)
• ¿Por qué esto si ya la seguridad está implementada en JavaEE estándar?

• Ciertos mecanismos están estandarizados, pero otros dependen del servidor de aplicaciones,

básicamente el enlace entre la aplicación y las “fuentes de autorización” (BD, LDAP,
certificados)

• Una aplicación con Spring Security es más portable que una estándar (!)

Seguridad con Spring Security

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

3



Experto Universitario Java Enterprise

Configuración mínima para aplicación
web
• Añadir las dependencias de Spring Security
• Modificar el web.xml para que Spring Security intercepte las peticiones a la

aplicación y pueda controlar el acceso

• Crear un fichero de configuración XML para la seguridad


Indicar en el web.xml dónde está este archivo

Seguridad con Spring Security

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

4

<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>3.1.3.RELEASE</version></dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>3.1.3.RELEASE</version></dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>3.1.3.RELEASE</version></dependency>

Experto Universitario Java Enterprise

Configuración mínima para aplicación web (II)

• Spring Security debe interceptar las peticiones para poder controlar el acceso

• Se usan filtros de servlets

• Decirle a Spring dónde está el fichero de configuración de seguridad

• Es un fichero de configuración de beans “estándar”

Seguridad con Spring Security

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

5

<filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class> org.springframework.web.filter.DelegatingFilterProxy </filter-class></filter><filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern></filter-mapping><context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/spring/root-context.xml /WEB-INF/spring/security-context.xml </param-value></context-param><listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class></listener>

Experto Universitario Java Enterprise

Configuración mínima para aplicación web (III)

• Crear el fichero de configuración de seguridad

• Es un fichero de configuración de beans típico de Spring, pero básicamente contendrá

etiquetas de seguridad

• También podríamos meter las etiquetas en el fichero de configuración “principal” de la

aplicación

Seguridad con Spring Security

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

6

<?xml version="1.0" encoding="UTF-8"?><beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd"> <http auto-config="true"> <intercept-url pattern="/**" access="ROLE_USER" /> </http> <authentication-manager alias="authenticationManager"> <authentication-provider> <user-service> <user authorities="ROLE_USER" name="guest" password="guest" /> </user-service> </authentication-provider> </authentication-manager></beans:beans>

Experto Universitario Java Enterprise

Autentificación contra una base de datos

• Cambiar el authentication manager
• Esta es una versión inicial, solo sirve si se usa el esquema de BD por defecto

(ahora veremos cuál es)

Seguridad con Spring Security

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

7

<authentication-manager alias="authenticationManager"> <authentication-provider> <jdbc-user-service data-source-ref="miDataSource"/> </authentication-provider></authentication-manager> <!-- datasource, como siempre que nos queremos conectar a una BD en Spring --><jee:jndi-lookup id="miDataSource" jndi-name="jdbc/securityDS" resource-ref="true"/>

Experto Universitario Java Enterprise

Cómo obtiene spring usuarios/roles

• Se supone un esquema de BD “por defecto” y se hacen 2 queries SQL, una para

comprobar el password y otra para obtener los roles

• Si tenemos otro esquema distinto, será cuestión de “montar” 2 queries que

devuelvan los resultados con el formato que espera Spring

Seguridad con Spring Security

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

8

SELECT username, password, enabled FROM users WHERE username = ? SELECT username, authority FROM authorities WHERE username = ?SELECT login as username, password, true as enabled FROM usuarios WHERE login=? SELECT login as username, rol as authority FROM roles WHERE login=?

Experto Universitario Java Enterprise

En el fichero de configuración...

Seguridad con Spring Security

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

9

<authentication-manager alias="authenticationManager"> <authentication-provider user-service-ref="miUserServiceJDBC" /></authentication-manager> <beans:bean id="miUserServiceJDBC" class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl"> <beans:property name="dataSource" ref="miDataSource"/> <beans:property name="usersByUsernameQuery" value="SELECT login as username, password, true as enabled FROM usuarios WHERE login=?"/> <beans:property name="authoritiesByUsernameQuery" value="SELECT login as username, rol as authority FROM roles WHERE login=?"/> </beans:bean> <jee:jndi-lookup id="miDataSource" jndi-name="jdbc/securityDS" resource-ref="true"/>

Experto Universitario Java Enterprise

Personalización de la seguridad

• Con la configuración anterior, Spring nos da un formulario de login auto-generado
• Usar nuestro propio formulario de login
• Fichero de configuración



¡Acordarse de desproteger el acceso al formulario!

• HTML del formulario, muy similar al estándar

• En el estándar no se puede ir directamente a la URL del formulario, lo que nos obliga al “truco”

de ir a una URL protegida para forzar el salto al formulario. Aquí no hace falta eso

Seguridad con Spring Security

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

10

<http pattern="/login.html" security="none"/> <http> <intercept-url pattern="/**" access="ROLE_REGISTRADO, ROLE_ADMIN" /> <form-login login-page="/login.html" default-target-url="/main.html" /></http><form action="j_spring_security_check" method="post"> Usuario: <input type="text" name="j_username"/> <br/> Contraseña: <input type="password" name="j_password"/> <br/> <input type="submit" value="Entrar"/></form>

Experto Universitario Java Enterprise

Otras ”mejoras”

• Logout

• Remember-me: no tenemos que hacer login cada vez que accedamos, se guarda

en el navegador
• No se guarda login/password, sino un token de acceso (hash md5 a partir de

login,password,clave de la aplicacion, fecha expiración)

Seguridad con Spring Security

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

11

<http> ... <logout logout-url="/logout" logout-success-url="/adios.jsp"/></http><!--borrará la sesión y saltará a “adios.jsp” --><a href="logout">Logout</a><http> ... <remember-me key="claveDeLaAplicacion"/></http><!-- añadir este campo al formulario de login --><input type="checkbox" name="_spring_security_remember_me"/> Recordarme en este ordenador

Experto Universitario Java Enterprise

Autentificación basic vs. formulatio

• BASIC es apropiado para clientes REST/Acceso remoto

Seguridad con Spring Security

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

12

<!-- servicios REST sin estado con autentificación Basic --><http pattern="/restful/**" create-session="stateless"> <intercept-url pattern='/**' access='ROLE_REMOTE' /> <http-basic /></http> <!-- Desproteger la página de login--><http pattern="/login.html" security="none"/> <!-- Clientes web con autentificación basada en formulario --><http> <intercept-url pattern='/**' access='ROLE_USER' /> <form-login login-page='/login.html' default-target-url="/home.html"/> <logout /></http>

Experto Universitario Java Enterprise

Seguridad de “grano fino” en los JSP

• Dependencia de una librería adicional

• Tomamos una URL “de referencia”. Si el usuario actual puede acceder a ella, el

contenido del tag se mostrará

Seguridad con Spring Security

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring

13

<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-taglibs</artifactId> <version>3.1.3.RELEASE</version></dependency><%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>...<sec:authorize url="/admin/eliminar"> <a href="/admin/eliminar">Eliminar</a></sec:authorize>

Experto Universitario Java Enterprise

Seguridad de “grano fino” en los JSP

• También se pueden usar expresiones SpEL

• hasRole(rol)
• hasAnyRole(rol1,rol2,...)

  • Links de descarga
http://lwp-l.com/pdf14932

Comentarios de: Sesión 7: Seguridad con Spring Security (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad