Gyakorlat – Titkos kódokat használó Java-alkalmazás kódolása

Befejeződött

Egy adatbázishoz csatlakozó Java-webalkalmazást fog kódolni a Spring Boot használatával.

Biztonsági okokból a jövőben biztonságossá kell tenni az adatbázis-hozzáférést. Először azonban hozzuk létre az alkalmazás-infrastruktúrát, majd konfiguráljuk a Java-alkalmazást a használathoz.

Az alkalmazásinfrastruktúra létrehozása

Ebben a gyakorlatban az Azure CLI használatával hozza létre a következő erőforrásokat:

  • Egy Azure-erőforráscsoport, amely az alkalmazás összes erőforrását tartalmazza.
  • PostgreSQL-adatbáziskiszolgáló.
  • Egy Azure Spring Apps-fürt és egy ebben a fürtben futó Spring Boot-alkalmazás.

A szkript elején meg kell adnia néhány környezeti változót, amelyeknek egyedinek kell lenniük az Azure-ban.

Meg kell adnia a helyi IP-címet is az adatbázis helyi számítógépről való eléréséhez. Ennek az IP-címnek IPv4-címnek kell lennie. Ha nem ismeri a helyi IP-címét, a következő webhelyre léphet: https://www.whatismyip.com/

Állítsa be a következő környezeti változókat:

AZ_RESOURCE_GROUP=<YOUR_UNIQUE_RESOURCE_GROUP_NAME>
AZ_DATABASE_USERNAME=<YOUR_POSTGRESQL_USERNAME>
AZ_DATABASE_PASSWORD=<YOUR_POSTGRESQL_PASSWORD>
AZ_LOCAL_IP_ADDRESS=<YOUR_LOCAL_IP_ADDRESS>

A környezeti változók beállítása után az erőforrások létrehozásához futtassa a következő parancsot:

AZ_LOCATION=eastus
# Must be all lowercase
AZ_SPRING_CLOUD=spring-${AZ_RESOURCE_GROUP,,}

AZ_DATABASE_NAME=pgsql-${AZ_RESOURCE_GROUP}
AZ_DATABASE_USERNAME=${AZ_DATABASE_USERNAME}

az group create \
    --name $AZ_RESOURCE_GROUP \
    --location $AZ_LOCATION

A parancs végrehajtása több percig is eltarthat.

az postgres server create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name $AZ_DATABASE_NAME \
    --location $AZ_LOCATION \
    --sku-name B_Gen5_1 \
    --storage-size 5120 \
    --admin-user $AZ_DATABASE_USERNAME \
    --admin-password $AZ_DATABASE_PASSWORD
az postgres server firewall-rule create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name $AZ_DATABASE_NAME-database-allow-local-ip \
    --server $AZ_DATABASE_NAME \
    --start-ip-address $AZ_LOCAL_IP_ADDRESS \
    --end-ip-address $AZ_LOCAL_IP_ADDRESS

az postgres server firewall-rule create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name $AZ_DATABASE_NAME-database-allow-azure-ip \
    --server $AZ_DATABASE_NAME \
    --start-ip-address 0.0.0.0 \
    --end-ip-address 0.0.0.0
az postgres db create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name demo \
    --server-name $AZ_DATABASE_NAME

A parancs végrehajtása több percig is eltarthat.

az extension add --name spring

az spring create \
   --name $AZ_SPRING_CLOUD \
   --resource-group $AZ_RESOURCE_GROUP \
   --location $AZ_LOCATION \
   --sku Basic

A parancs végrehajtása több percig is eltarthat.

az spring app create \
   --resource-group $AZ_RESOURCE_GROUP \
   --service $AZ_SPRING_CLOUD \
   --name application \
   --runtime-version Java_11 \
   --assign-endpoint true

Ezeknek a szkripteknek a futtatása némi időt vesz igénybe, így lehetővé teheti, hogy a háttérben fussanak, és addig is elkezdhesse az alkalmazás kódolását.

A Java-alkalmazás konfigurálása

Kérje le az alkalmazás csontvázát a https://github.com/Azure-Samples/manage-secrets-in-java-applications GitHub-adattárból a git clone következő paranccsal:

git clone https://github.com/Azure-Samples/manage-secrets-in-java-applications.git

Ez az alkalmazás a Spring Data JPA használatával éri el az adatbázist. Megtekintheti a CRUD-adattár felületét:

package com.example.demo;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ItemRepository extends CrudRepository<Item, Integer> {
}

Az adatbázisban tárolt adatok ezután a weben lesznek közzétéve egy Spring MVC REST Controller használatával:

package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ItemController {

    private final ItemRepository itemRepository;

    public ItemController(ItemRepository itemRepository) {
        this.itemRepository = itemRepository;
    }

    @GetMapping("/")
    String welcome() {
        return "Here are all the database items: " + itemRepository.findAll();
    }
}

Ezeket az adatokat a rendszer indításkor szúrja be az adatbázisba a src/main/resources/data.sql fájl használatával:

insert into item (details) values ('This is a item from the database');

Ha több adatot szeretne, vagy testre szeretné szabni, további sorokat is hozzáadhat ehhez a fájlhoz.

Az adatbázis eléréséhez konfigurálnia kell a src/main/resources/application.properties fájlt:

logging.level.org.springframework.jdbc.core=DEBUG

spring.datasource.url=jdbc:postgresql://${azureDatabaseName}.postgres.database.azure.com:5432/demo
spring.datasource.username=${azureDatabaseUsername}@${azureDatabaseName}
spring.datasource.password=${azureDatabasePassword}

spring.sql.init.mode=always

Ez a konfigurációs fájl három változóval rendelkezik, amelyeket konfigurálni kell:

  • ${azureDatabaseName} a környezeti változóban AZ_DATABASE_NAME korábban konfigurált PostgreSQL-adatbázis neve. Írja be echo $AZ_DATABASE_NAME a megtekintéséhez.
  • ${azureDatabaseUsername} a környezeti változóban AZ_DATABASE_USERNAME korábban konfigurált adatbázis-felhasználónév neve. Írja be echo $AZ_DATABASE_USERNAME a megtekintéséhez.
  • ${azureDatabasePassword} a környezeti változóban AZ_DATABASE_PASSWORD korábban konfigurált adatbázisjelszó neve. Írja be echo $AZ_DATABASE_PASSWORD a megtekintéséhez.

Ahogy az előző leckében láttuk, helytelen gyakorlat az alkalmazás forráskódjában található értékek kódolása. Az alkalmazás teszteléséhez azonban ideiglenesen megírhatja őket, és futtathatja az alkalmazást:

./mvnw spring-boot:run

Az adatbázis tartalmát a Spring MVC-vezérlő az alábbi paranccsal vagy webböngésző használatával olvashatja el:

curl http://localhost:8080

A Java-alkalmazás üzembe helyezése az Azure-ban

Az alkalmazás üzembe helyezéséhez először Jar-fájlként kell csomagolnia:

./mvnw clean package

Ez a parancs létrehoz egy végrehajtható Jar-fájlt a target címtárban, amelyet az Azure CLI használatával helyez üzembe:

az spring app deploy \
   --resource-group $AZ_RESOURCE_GROUP \
   --service $AZ_SPRING_CLOUD \
   --name application \
   --artifact-path target/*.jar

Ha hibákba ütközik, az alkalmazásnaplókat az alábbi parancs beírásával tekintheti meg:

az spring app logs \
   --resource-group $AZ_RESOURCE_GROUP \
   --service $AZ_SPRING_CLOUD \
   --name application

Az alkalmazás ezután elérhető lesz a felhőben, és egy cURL-paranccsal érheti el az adatait:

curl https://$AZ_SPRING_CLOUD-application.azuremicroservices.io

# Expected output:
#
# Here are all the database items: [Secret{Id=1, details='This is a item from the database'}]
#

Gratulálunk! Sikeresen létrehozott egy Java-alkalmazást, amely egy adatbázishoz csatlakozik! Most a következő egységekben kell biztonságossá tenni az adatbázis hitelesítő adatait.