{"record":{"id":"78e91a2dcd8e1a30","repo":"quarkusio/quarkus","slug":"no-attributes-were-specified-78e91a","errorCode":null,"errorMessage":"No attributes were specified","messagePattern":"No attributes were specified","errorType":"http","errorClass":"RuntimeException","httpStatus":500,"severity":"error","filePath":"integration-tests/elytron-resteasy-reactive/src/main/java/io/quarkus/it/resteasy/reactive/elytron/RootResource.java","lineNumber":81,"sourceCode":"    @PermissionsAllowed(value = \"manager-permission\", permission = ManagerPermission.class)\n    public String managerPermission(@Context SecurityContext sec) {\n        return sec.getUserPrincipal().getName();\n    }\n\n    @GET\n    @Path(\"/employee\")\n    @RolesAllowed(\"${employees-config-property}\")\n    public String employee(@Context SecurityContext sec) {\n        return sec.getUserPrincipal().getName();\n    }\n\n    @GET\n    @Path(\"/attributes\")\n    @Authenticated\n    public String getAttributes() {\n        final Map<String, Object> attributes = identity.getAttributes();\n        if (attributes == null || attributes.isEmpty()) {\n            throw new RuntimeException(\"No attributes were specified\");\n        }\n\n        return attributes.entrySet().stream()\n                .map(e -> e.getKey() + \"=\" + e.getValue())\n                .collect(Collectors.joining(\",\"));\n    }\n}\n","sourceCodeStart":63,"sourceCodeEnd":89,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/integration-tests/elytron-resteasy-reactive/src/main/java/io/quarkus/it/resteasy/reactive/elytron/RootResource.java#L63-L89","documentation":"Sentinel RuntimeException thrown by RootResource.getAttributes() in the reactive test when SecurityIdentity.getAttributes() is null or empty. Reactive variant of error 3901: the @Authenticated identity exists but carries no attributes.","triggerScenarios":"GET /attributes with an authenticated identity that has no attributes attached in the reactive security pipeline.","commonSituations":"No SecurityIdentityAugmentor registered; Elytron realm not mapping roles/attributes; attribute defaults changed between Quarkus versions.","solutions":["Add a SecurityIdentityAugmentor bean that supplies attributes","Verify realm/role mapping in quarkus-elytron-security-reactive configuration","Confirm @Authenticated triggers the expected identity augmentation","Check HTTP security layer attaches ROUTING_CONTEXT_ATTRIBUTE and other defaults"],"exampleFix":"// before: bare identity\n// after:\n@ApplicationScoped\npublic class AttrAugmentor implements SecurityIdentityAugmentor {\n    // add key/value attributes via QuarkusSecurityIdentity.builder()...\n}","handlingStrategy":"validation","validationCode":"Map<String, Object> attrs = identity.getAttributes();\nif (attrs == null || attrs.isEmpty()) {\n    throw new IllegalStateException(\"No identity attributes; augmentor not applied\");\n}","typeGuard":"boolean hasAttributes(SecurityIdentity identity) {\n    return identity != null && identity.getAttributes() != null && !identity.getAttributes().isEmpty();\n}","tryCatchPattern":"try {\n    renderAttributes(identity.getAttributes());\n} catch (RuntimeException e) {\n    renderAttributes(Map.of());\n}","preventionTips":["Guarantee an augmentor bean exists in the reactive app","Write integration tests asserting non-empty attributes for @Authenticated endpoints","Track default attribute changes across Quarkus upgrades"],"tags":["security","elytron","resteasy-reactive","identity-attributes"],"backgroundTag":"security-identity-no-attributes","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}