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

  1. Autenticació i Autorització: Suport per a múltiples mecanismes d'autenticació (formularis, HTTP Basic, OAuth, etc.) i autorització basada en rols.
  2. Integració amb Spring Boot: Configuració fàcil i ràpida amb Spring Boot Starter.
  3. Protecció contra Amenaces: Mecanismes integrats per protegir contra atacs comuns.
  4. 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

  1. Crear una nova aplicació Spring Boot o utilitzar una existent.
  2. Afegir la dependència de Spring Security al fitxer pom.xml.
  3. Crear una classe de configuració de seguretat (SecurityConfig) per personalitzar la configuració de seguretat.
  4. 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

Mòdul 2: Conceptes bàsics de Spring Boot

Mòdul 3: Construint serveis web RESTful

Mòdul 4: Accés a dades amb Spring Boot

Mòdul 5: Seguretat a Spring Boot

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ó

Mòdul 10: Millors pràctiques i consells

© Copyright 2024. Tots els drets reservats