は、おそらくコードは別のスレッドで実行されることを意味し、セキュリティコンテキストがあるため、通常はスレッドにバインドされていますが、新しいスレッドで非同期タスクを実行すると、親からセキュリティコンテキストを継承しません。つまり、新しいスレッドは何らかの方法で再認証する必要があります。 WildFly 10の場合は、このあなたのラムダにこれを追加した場合に動作するはずです:
org.jboss.security.client.SecurityClient client = SecurityClientFactory.getSecurityClient();
client.setSimple("USERNAME", "PASSWORD");
client.login();
try {
bean.call();
} finally {
client.logout();
}
あなたはElytronでWildFly 11に切り替えた場合、これは利用できるようになります:
final SecurityIdentity identity = org.wildfly.security.auth.server.SecurityDomain.getCurrent().getCurrentSecurityIdentity();
identity.runAs(() -> { the-code-you-want-to-run-with-this-identity });
はビットコードを表示します。ラムダの様子は?パラレルストリームですか?ラムダが実行される前に、あなたは正しいプリンシパルを持っていますか?メソッドに@RolesAllowedアノテーションを追加して、ラムダ呼び出しの前に実行できることを確認します。 – HRgiger