2.5. アプリケーションを書く
次の例に示すように、通常の Jakarta REST リソースである
/api/users/me
エンドポイントを実装します。package org.acme.security.openid.connect; import jakarta.annotation.security.RolesAllowed; import jakarta.inject.Inject; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import org.jboss.resteasy.reactive.NoCache; import io.quarkus.security.identity.SecurityIdentity; @Path("/api/users") public class UsersResource { @Inject SecurityIdentity securityIdentity; @GET @Path("/me") @RolesAllowed("user") @NoCache public User me() { return new User(securityIdentity); } public static class User { private final String userName; User(SecurityIdentity securityIdentity) { this.userName = securityIdentity.getPrincipal().getName(); } public String getUserName() { return userName; } } }
次の例に示すように、
/api/admin
エンドポイントを実装します。package org.acme.security.openid.connect; 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 admin() { return "granted"; } }
注記この例の主な違いは、
@RolesAllowed
アノテーションを使用して、admin
ロールを付与されたユーザーのみがエンドポイントにアクセスできることを確認することです。
SecurityIdentity
の注入は、@RequestScoped
コンテキストと @ApplicationScoped
コンテキストの両方でサポートされています。