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(); } }