Ćwiczenie — kod aplikacji Java korzystającej z wpisów tajnych
Kodujesz aplikację internetową Java przy użyciu platformy Spring Boot, która łączy się z bazą danych.
Ze względów bezpieczeństwa należy zabezpieczyć ten dostęp do bazy danych w przyszłości. Najpierw utwórzmy infrastrukturę aplikacji, a następnie skonfigurujemy aplikację Java do użycia.
Tworzenie infrastruktury aplikacji
W tym ćwiczeniu użyjesz interfejsu wiersza polecenia platformy Azure do utworzenia następujących zasobów:
- Grupa zasobów platformy Azure zawierająca wszystkie zasoby aplikacji.
- Serwer bazy danych PostgreSQL.
- Klaster usługi Azure Spring Apps i aplikacja Spring Boot działająca w tym klastrze.
Musisz podać pewne zmienne środowiskowe na początku skryptu, które powinny być unikatowe na platformie Azure.
Musisz również podać lokalny adres IP, aby uzyskać dostęp do bazy danych z komputera lokalnego. Ten adres IP powinien być adresem IPv4. Jeśli nie znasz lokalnego adresu IP, możesz przejść do następującej witryny internetowej: https://www.whatismyip.com/
Ustaw następujące zmienne środowiskowe:
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>
Po ustawieniu tych zmiennych środowiskowych możesz uruchomić następujące polecenie, aby utworzyć zasoby:
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
Wykonanie tego polecenia może potrwać kilka 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
Wykonanie tego polecenia może potrwać kilka minut.
az extension add --name spring
az spring create \
--name $AZ_SPRING_CLOUD \
--resource-group $AZ_RESOURCE_GROUP \
--location $AZ_LOCATION \
--sku Basic
Wykonanie tego polecenia może potrwać kilka minut.
az spring app create \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_CLOUD \
--name application \
--runtime-version Java_11 \
--assign-endpoint true
Uruchomienie tych skryptów zajmuje trochę czasu, dzięki czemu można pozwolić im działać w tle i rozpocząć kodowanie aplikacji w międzyczasie.
Konfigurowanie aplikacji Java
Pobierz szkielet aplikacji z https://github.com/Azure-Samples/manage-secrets-in-java-applications repozytorium GitHub przy użyciu git clone
polecenia :
git clone https://github.com/Azure-Samples/manage-secrets-in-java-applications.git
Ta aplikacja używa narzędzia Spring Data JPA do uzyskiwania dostępu do bazy danych. Możesz zapoznać się z interfejsem CRUD Repository:
package com.example.demo;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ItemRepository extends CrudRepository<Item, Integer> {
}
Dane przechowywane w bazie danych są następnie uwidaczniane w Sieci Web przy użyciu kontrolera 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();
}
}
Te dane są wstawiane do bazy danych podczas uruchamiania src/main/resources/data.sql
przy użyciu pliku :
insert into item (details) values ('This is a item from the database');
Możesz dodać więcej wierszy do tego pliku, jeśli chcesz uzyskać więcej danych lub jeśli chcesz go dostosować.
Aby uzyskać dostęp do bazy danych, należy skonfigurować src/main/resources/application.properties
plik:
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
Ten plik konfiguracji zawiera trzy zmienne, które należy skonfigurować:
${azureDatabaseName}
to nazwa bazy danych PostgreSQL, która została skonfigurowana wcześniej w zmiennej środowiskowejAZ_DATABASE_NAME
. Wpiszecho $AZ_DATABASE_NAME
, aby go wyświetlić.${azureDatabaseUsername}
to nazwa nazwy użytkownika bazy danych, która została skonfigurowana wcześniej w zmiennej środowiskowejAZ_DATABASE_USERNAME
. Wpiszecho $AZ_DATABASE_USERNAME
, aby go wyświetlić.${azureDatabasePassword}
to nazwa hasła bazy danych, która została skonfigurowana wcześniej w zmiennej środowiskowejAZ_DATABASE_PASSWORD
. Wpiszecho $AZ_DATABASE_PASSWORD
, aby go wyświetlić.
Jak widzieliśmy w poprzedniej lekcji, dobrym rozwiązaniem jest hard-code tych wartości w kodzie źródłowym aplikacji. Jednak aby przetestować aplikację, możesz je tymczasowo napisać i uruchomić aplikację:
./mvnw spring-boot:run
Zawartość bazy danych można odczytać, korzystając z następującego polecenia lub korzystając z przeglądarki internetowej, korzystając z kontrolera Spring MVC:
curl http://localhost:8080
Wdrażanie aplikacji Java na platformie Azure
Aby wdrożyć aplikację, należy najpierw spakować ją jako plik Jar:
./mvnw clean package
To polecenie tworzy wykonywalny plik Jar w target
katalogu, który jest wdrażany przy użyciu interfejsu wiersza polecenia platformy Azure:
az spring app deploy \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_CLOUD \
--name application \
--artifact-path target/*.jar
Jeśli wystąpią błędy, możesz przejrzeć dzienniki aplikacji, wpisując następujące polecenie:
az spring app logs \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_CLOUD \
--name application
Aplikacja będzie następnie dostępna w chmurze i będzie można uzyskać dostęp do jej danych za pomocą polecenia 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'}]
#
Gratulacje! Pomyślnie utworzono aplikację Java, która łączy się z bazą danych. Teraz należy zabezpieczyć poświadczenia bazy danych w następnych lekcjach.