Spring Security és un marc de seguretat potent i altament personalitzable per a aplicacions Java, que proporciona autenticació, autorització i altres funcions de seguretat. En aquest mòdul, aprendrem els conceptes bàsics de Spring Security i com integrar-lo en una aplicació Spring Boot.
Objectius del Mòdul
- Entendre què és Spring Security i per què és important.
- Aprendre a configurar Spring Security en una aplicació Spring Boot.
- Conèixer els conceptes bàsics d'autenticació i autorització.
Què és Spring Security?
Spring Security és un projecte de l'ecosistema Spring que se centra en proporcionar seguretat a les aplicacions. Ofereix una àmplia gamma de funcionalitats, incloent:
- Autenticació: Verificació de la identitat dels usuaris.
- Autorització: Control d'accés a recursos basat en rols i permisos.
- Protecció contra atacs comuns: Com ara CSRF (Cross-Site Request Forgery), XSS (Cross-Site Scripting), i altres.
Característiques Clau de Spring Security
- Autenticació i Autorització: Suport per a múltiples mecanismes d'autenticació (formularis, HTTP Basic, OAuth, etc.) i autorització basada en rols.
- Integració amb Spring Boot: Configuració fàcil i ràpida amb Spring Boot Starter.
- Protecció contra Amenaces: Mecanismes integrats per protegir contra atacs comuns.
- Extensibilitat: Altament personalitzable per adaptar-se a les necessitats específiques de l'aplicació.
Configuració de Spring Security en una Aplicació Spring Boot
Pas 1: Afegir la Dependència de Spring Security
Per començar a utilitzar Spring Security en una aplicació Spring Boot, primer hem d'afegir la dependència corresponent al fitxer pom.xml
:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
Pas 2: Configuració Bàsica de Seguretat
Spring Boot proporciona una configuració de seguretat per defecte que protegeix totes les rutes de l'aplicació. Per personalitzar aquesta configuració, hem de crear una classe de configuració de seguretat.
import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/", "/home").permitAll() // Permet l'accés a aquestes rutes sense autenticació .anyRequest().authenticated() // Requereix autenticació per a qualsevol altra ruta .and() .formLogin() .loginPage("/login") // Especifica la pàgina de login personalitzada .permitAll() .and() .logout() .permitAll(); } }
Pas 3: Crear una Pàgina de Login Personalitzada
Per proporcionar una experiència d'usuari millorada, podem crear una pàgina de login personalitzada. A continuació es mostra un exemple senzill d'una pàgina de login amb Thymeleaf:
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Login</title> </head> <body> <h1>Login</h1> <form th:action="@{/login}" method="post"> <div> <label>Username:</label> <input type="text" name="username"/> </div> <div> <label>Password:</label> <input type="password" name="password"/> </div> <div> <button type="submit">Login</button> </div> </form> </body> </html>
Exercici Pràctic
Objectiu
Configurar Spring Security en una aplicació Spring Boot per protegir les rutes i crear una pàgina de login personalitzada.
Passos
- Crear una nova aplicació Spring Boot o utilitzar una existent.
- Afegir la dependència de Spring Security al fitxer
pom.xml
. - Crear una classe de configuració de seguretat (
SecurityConfig
) per personalitzar la configuració de seguretat. - Crear una pàgina de login personalitzada utilitzant Thymeleaf o qualsevol altre motor de plantilles.
Solució
// SecurityConfig.java import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/", "/home").permitAll() .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") .permitAll() .and() .logout() .permitAll(); } }
<!-- login.html --> <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Login</title> </head> <body> <h1>Login</h1> <form th:action="@{/login}" method="post"> <div> <label>Username:</label> <input type="text" name="username"/> </div> <div> <label>Password:</label> <input type="password" name="password"/> </div> <div> <button type="submit">Login</button> </div> </form> </body> </html>
Resum
En aquest tema, hem après què és Spring Security i com configurar-lo en una aplicació Spring Boot. Hem vist com afegir la dependència de Spring Security, crear una configuració bàsica de seguretat i implementar una pàgina de login personalitzada. En els següents temes, aprofundirem en conceptes més avançats com l'autenticació i l'autorització d'usuaris.
Curs de Spring Boot
Mòdul 1: Introducció a Spring Boot
- Què és Spring Boot?
- Configuració del teu entorn de desenvolupament
- Creant la teva primera aplicació Spring Boot
- Entenent l'estructura del projecte Spring Boot
Mòdul 2: Conceptes bàsics de Spring Boot
- Anotacions de Spring Boot
- Injecció de dependències a Spring Boot
- Configuració de Spring Boot
- Propietats de Spring Boot
Mòdul 3: Construint serveis web RESTful
- Introducció als serveis web RESTful
- Creant controladors REST
- Gestionant mètodes HTTP
- Gestió d'excepcions en REST
Mòdul 4: Accés a dades amb Spring Boot
- Introducció a Spring Data JPA
- Configuració de fonts de dades
- Creant entitats JPA
- Utilitzant repositoris de Spring Data
- Mètodes de consulta a Spring Data JPA
Mòdul 5: Seguretat a Spring Boot
- Introducció a Spring Security
- Configuració de Spring Security
- Autenticació i autorització d'usuaris
- Implementant autenticació JWT
Mòdul 6: Proves a Spring Boot
Mòdul 7: Funcions avançades de Spring Boot
Mòdul 8: Desplegant aplicacions Spring Boot
Mòdul 9: Rendiment i monitorització
- Optimització del rendiment
- Monitorització amb Spring Boot Actuator
- Utilitzant Prometheus i Grafana
- Gestió de registres i logs