Cvičení – kódování aplikace v Javě, která používá tajné kódy
Budete kódovat webovou aplikaci Java pomocí Spring Bootu, která se připojuje k databázi.
Z bezpečnostníchdůvodůch Nejprve ale vytvoříme aplikační infrastrukturu a nakonfigurujeme aplikaci v Javě tak, aby ji používala.
Vytvoření aplikační infrastruktury
V tomto cvičení použijete Azure CLI k vytvoření následujících prostředků:
- Skupina prostředků Azure, která obsahuje všechny prostředky pro vaši aplikaci.
- Databázový server PostgreSQL.
- Cluster Azure Spring Apps a aplikace Spring Boot běžící v tomto clusteru.
Na začátku skriptu musíte zadat některé proměnné prostředí, které by měly být jedinečné v rámci Azure.
Musíte také zadat místní IP adresu pro přístup k databázi z místního počítače. Tato IP adresa by měla být IPv4 adresa. Pokud místní IP adresu neznáte, můžete přejít na následující web: https://www.whatismyip.com/
Nastavte následující proměnné prostředí:
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>
Jakmile jsou tyto proměnné prostředí nastavené, můžete k vytvoření prostředků spustit následující příkaz:
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
Provedení tohoto příkazu může trvat i několik minut.
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
Provedení tohoto příkazu může trvat i několik minut.
az extension add --name spring
az spring create \
--name $AZ_SPRING_CLOUD \
--resource-group $AZ_RESOURCE_GROUP \
--location $AZ_LOCATION \
--sku Basic
Provedení tohoto příkazu může trvat i několik minut.
az spring app create \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_CLOUD \
--name application \
--runtime-version Java_11 \
--assign-endpoint true
Spuštění těchto skriptů nějakou dobu trvá, takže je můžete nechat běžet na pozadí a mezitím začít programovat aplikaci.
Konfigurace aplikace v Javě
Pomocí příkazu získejte kostru aplikace z https://github.com/Azure-Samples/manage-secrets-in-java-applications úložiště git clone
GitHub:
git clone https://github.com/Azure-Samples/manage-secrets-in-java-applications.git
Tato aplikace používá spring Data JPA pro přístup k databázi. Můžete se podívat na rozhraní úložiště CRUD:
package com.example.demo;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ItemRepository extends CrudRepository<Item, Integer> {
}
Data uložená v databázi se pak zveřejňují na webu pomocí kontroleru REST Spring MVC:
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();
}
}
Tato data se vkládají do databáze při spuštění pomocí src/main/resources/data.sql
souboru:
insert into item (details) values ('This is a item from the database');
Do tohoto souboru můžete přidat další řádky, pokud chcete více dat, nebo pokud ho chcete přizpůsobit.
Pokud chcete získat přístup k databázi, musíte soubor nakonfigurovat src/main/resources/application.properties
:
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
Tento konfigurační soubor má tři proměnné, které je potřeba nakonfigurovat:
${azureDatabaseName}
je název databáze PostgreSQL, která byla nakonfigurovaná dříve vAZ_DATABASE_NAME
proměnné prostředí. Zadánímecho $AZ_DATABASE_NAME
ho zobrazíte.${azureDatabaseUsername}
je název uživatelského jména databáze, které bylo nakonfigurováno dříve vAZ_DATABASE_USERNAME
proměnné prostředí. Zadánímecho $AZ_DATABASE_USERNAME
ho zobrazíte.${azureDatabasePassword}
je název hesla databáze, které bylo nakonfigurováno dříve vAZ_DATABASE_PASSWORD
proměnné prostředí. Zadánímecho $AZ_DATABASE_PASSWORD
ho zobrazíte.
Jak jsme viděli v předchozí lekci, je to špatný postup, jak pevně zakódovat tyto hodnoty ve zdrojovém kódu aplikace. K otestování aplikace je ale můžete dočasně napsat a spustit aplikaci:
./mvnw spring-boot:run
Obsah databáze můžete číst tak, že se k kontroleru Spring MVC dostanete pomocí následujícího příkazu nebo pomocí webového prohlížeče:
curl http://localhost:8080
Nasazení aplikace v Javě do Azure
Pokud chcete aplikaci nasadit, musíte ji nejprve zabalit jako soubor Jar:
./mvnw clean package
Tento příkaz vytvoří spustitelný soubor Jar v target
adresáři, který nasadíte pomocí Azure CLI:
az spring app deploy \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_CLOUD \
--name application \
--artifact-path target/*.jar
Pokud dojde k selháním, můžete se podívat na protokoly aplikace zadáním následujícího příkazu:
az spring app logs \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_CLOUD \
--name application
Aplikace bude pak dostupná v cloudu a k jejím datům se dostanete pomocí příkazu cURL:
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'}]
#
Gratulujeme! Úspěšně jste vytvořili aplikaci Java, která se připojuje k databázi. Teď potřebujete zabezpečit přihlašovací údaje databáze v dalších lekcích.