带有 REST 和安全性的 Java 数据库应用程序原型

主要观点:

  • 工作开发中常需简单应用模板,文中创建连接数据库、暴露 REST 端点并基于角色访问控制的 Java 应用。
  • 数据库用 PostgreSQL,安全用 Keycloak,均在容器中部署,开发时用 podman 测试容器创建。
  • 应用用 Spring Boot 框架和 Flyway 进行数据库版本控制,这些技术是 Java EE 世界的行业标准。
  • 构建原型的需求是创建暴露 REST 端点的图书馆应用,实现多对多关系。
  • 给出完整工作应用的 GitHub 地址,文中代码片段取自该仓库。

关键信息:

  • 需定义环境变量如 DOCKER_POSTGRES_PASSWORD 等。
  • 配置 PostgreSQL 和 Keycloak 的容器创建及相关操作。
  • 在 Java 应用中编写自定义代码提取 Keycloak 加入 JWT 的角色。
  • 在 REST 控制器中用@PreAuthorize 注解限制访问。
  • 启动容器后需添加数据库密码,可用 curl 测试应用。

重要细节:

  • 配置 PostgreSQL 容器时设置相关环境变量和端口映射。
  • Keycloak 容器创建及创建 realm、用户、角色等操作,包括使用默认客户端 account-console 并进行相关配置。
  • Java 中提取角色的代码逻辑,如从 JWT 中获取 realm_access 中的 roles 并添加前缀生成 GrantedAuthority。
  • REST 控制器中用@PreAuthorize 注解根据角色限制访问不同端点。
  • 通过 curl 登录获取令牌并测试 creator 和 viewer 角色的功能。
阅读 21
0 条评论