1.4. 编写应用程序
保护 API 端点,以确定谁可以使用以下任一方法访问应用程序:
实施
/api/public端点,以允许所有用户访问该应用。在您的 Java 源代码中添加常规 Jakarta REST 资源,如以下代码片段中所示:src/main/java/org/acme/security/jpa/PublicResource.javapackage 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 资源:src/main/java/org/acme/security/jpa/AdminResource.javapackage 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获取当前经过身份验证的用户的访问权限,并返回其用户名,所有用户都从数据库检索。src/main/java/org/acme/security/jpa/UserResource.javapackage org.acme.security.jpa; import jakarta.annotation.security.RolesAllowed; 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(); } }