1.7. 使用 PostgreSQL 的 Dev Services 测试应用程序
在生产模式下运行应用程序之前,请先使用 PostgreSQL 的 Dev Services for PostgreSQL 完成应用程序的集成测试和原生模式。
首先,在您的测试项目中添加以下依赖项:
使用 Maven:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <scope>test</scope> </dependency><dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <scope>test</scope> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Gradle :
testImplementation("io.rest-assured:rest-assured")testImplementation("io.rest-assured:rest-assured")Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 以 dev 模式运行您的应用程序:
使用 Quarkus CLI:
quarkus dev
quarkus devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Maven:
./mvnw quarkus:dev
./mvnw quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Gradle :
./gradlew --console=plain quarkusDev
./gradlew --console=plain quarkusDevCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
以下属性配置演示了如何使 PostgreSQL 测试仅在生产(
prod)模式下运行。在这种情况下,PostgreSQL 的 Dev Services会启动并配置PostgreSQL测试容器。
-
如果您添加了
%prod.配置集前缀,则数据源属性对PostgreSQL 的 Dev Services不可见,且仅在生产模式下运行的应用程序中看到。 - 要编写集成测试,请使用以下代码示例:
正如您在此代码示例中看到的,您不需要从测试代码启动测试容器。
当您以 dev 模式启动应用程序时,PostgreSQL 的 Dev Services 会启动一个 PostgreSQL dev 模式容器,以便您可以开始开发应用程序。在开发应用程序时,您可以使用 Continuous Testing 功能单独添加和运行测试。在提供与 dev 模式容器不冲突的独立 PostgreSQL 测试容器时,用于 PostgreSQL 的 dev Services 支持测试。
1.7.1. 使用 curl 或浏览器来测试应用程序 复制链接链接已复制到粘贴板!
- 使用以下示例启动 PostgreSQL 服务器:
docker run --rm=true --name security-getting-started -e POSTGRES_USER=quarkus \
-e POSTGRES_PASSWORD=quarkus -e POSTGRES_DB=elytron_security_jpa \
-p 5432:5432 postgres:14.1
docker run --rm=true --name security-getting-started -e POSTGRES_USER=quarkus \
-e POSTGRES_PASSWORD=quarkus -e POSTGRES_DB=elytron_security_jpa \
-p 5432:5432 postgres:14.1
1.7.2. 编译并运行应用程序 复制链接链接已复制到粘贴板!
使用以下方法之一编译并运行 Quarkus 应用程序:
JVM 模式
编译应用程序:
使用 Quarkus CLI:
quarkus build
quarkus buildCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Maven:
./mvnw install
./mvnw installCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Gradle :
./gradlew build
./gradlew buildCopy to Clipboard Copied! Toggle word wrap Toggle overflow
运行应用程序:
java -jar target/quarkus-app/quarkus-run.jar
java -jar target/quarkus-app/quarkus-run.jarCopy to Clipboard Copied! Toggle word wrap Toggle overflow
原生模式
编译应用程序:
使用 Quarkus CLI:
quarkus build --native
quarkus build --nativeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Maven:
./mvnw install -Dnative
./mvnw install -DnativeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Gradle :
./gradlew build -Dquarkus.package.type=native
./gradlew build -Dquarkus.package.type=nativeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
运行应用程序:
./target/security-jpa-quickstart-1.0.0-SNAPSHOT-runner
./target/security-jpa-quickstart-1.0.0-SNAPSHOT-runnerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.7.3. 访问并测试应用程序安全性 复制链接链接已复制到粘贴板!
当应用运行时,您可以使用以下 Curl 命令之一访问其端点。
匿名连接到受保护的端点:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 匿名连接到受保护的端点:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以授权用户身份连接到受保护的端点:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您还可以使用浏览器访问相同的端点 URL。
如果您使用浏览器匿名连接到受保护的资源,则会显示基本身份验证表单,提示您输入凭证。
1.7.4. 结果 复制链接链接已复制到粘贴板!
当您提供授权用户的凭证时,如 admin:admin,Jakarta Persistence 安全扩展会验证和加载该用户的角色。admin 用户有权访问受保护的资源。
如果资源通过 @RolesAllowed ("user") 进行保护,则用户 admin 不会被授权访问该资源,因为它没有分配给"user"角色,如下例所示:
最后,名为 user 的用户被授权,安全上下文包含主体详情,例如 username。