1.4. 编写应用程序
保护 API 端点,以确定谁可以使用以下任一方法访问应用程序:
实施
/api/public
端点,以允许所有用户访问该应用。在您的 Java 源代码中添加常规 Jakarta REST 资源,如以下代码片段中所示:package org.acme.security.jpa; import jakarta.annotation.security.PermitAll; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; @Path("/api/public") public class PublicResource { @GET @PermitAll @Produces(MediaType.TEXT_PLAIN) public String publicResource() { return "public"; } }
实施 /api/admin 端点,该端点只能由拥有 admin 角色的用户访问。
/api/admin
端点的源代码类似,但您可以使用@RolesAllowed
注释来确保只有被授予admin
角色的用户才能访问端点。使用以下@RolesAllowed
注释添加 Jakarta REST 资源:package org.acme.security.jpa; import jakarta.annotation.security.RolesAllowed; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; @Path("/api/admin") public class AdminResource { @GET @RolesAllowed("admin") @Produces(MediaType.TEXT_PLAIN) public String adminResource() { return "admin"; } }
实施
/api/users/me
端点,该端点只能由拥有用户角色的用户进行访问
。使用SecurityContext
获取当前经过身份验证的用户的访问权限,并返回其用户名,所有用户都从数据库检索。package org.acme.security.jpa; import jakarta.annotation.security.RolesAllowed; import jakarta.inject.Inject; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.core.Context; import jakarta.ws.rs.core.SecurityContext; @Path("/api/users") public class UserResource { @GET @RolesAllowed("user") @Path("/me") public String me(@Context SecurityContext securityContext) { return securityContext.getUserPrincipal().getName(); } }