1.4. アプリケーションの作成
次のいずれかの方法を使用して、API エンドポイントを保護し、アプリケーションにアクセスできるユーザーを決定します。
すべてのユーザーがアプリケーションにアクセスできるように、
/api/publicエンドポイントを実装します。次のコードスニペットに示すように、通常の Jakarta REST リソースを Java ソースコードに追加します。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 エンドポイントを実装します。
/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"; } }userロールを持つユーザーのみがアクセスできる/api/users/meエンドポイントを実装します。SecurityContextを使用して、現在認証されているPrincipalユーザーにアクセスし、そのユーザー名を返します。これらはすべてデータベースから取得されます。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(); } }